A few years ago, I joined a startup where we were developing a new, very ambitious mobile app. Having spent there over two years, I left. It’s fair to say that things weren’t going great. Nowadays I’m working at a digital agency where we help companies of all sizes develop their apps and websites. I work specifically with clients who want to kick off their startup ideas and build an app from scratch. I help them with planning, design, and development. As I am now starting to build my own app, I wanted to recall the most important lessons learned from the mistakes I saw made in the past.
Before jumping into developing your application, you’ll have to do some preparatory work like market research, competitor analysis, etc. You should have a good understanding of what you’re trying to achieve with your product, what problems you’re trying to solve, what other apps are already in this space, and who your client base is. Each one of these items deserves a separate article, but I want to focus on the last one - your target market.
When planning your app it’s easy to say you want it to be used by people of all ages, genders, ethnicities, etc. After all, you want as many users as possible, right? You’d be shooting yourself in the foot with that approach. Think about marketing, how are you going to target every person on this planet? Unless you have a giant pile of money to throw into marketing, it’s going to be nearly impossible. Think about design and your feature set. How are you going to please people from very different groups with all their distinct needs?
You need to have a consistent mission statement and aim to solve one problem for one group of people. Think about the best way to reach those people. Ideally, you want them to be so excited about your product, that they’re going to spread the word for you. After the release, you can target more groups and expand further. But in the beginning, just keep things simple. After all, you have limited time and resources.
As I said before, you should know exactly what your goal and the purpose of the product are. Before you start working, define what features are absolutely necessary to fulfill that goal - this is your Minimum Viable Product (MVP). Once you have that list of features, stick to it and don’t add anything unless it’s essential for the successful launch. It’s very tempting to keep adding functionality to the scope of the project, but don’t do it, for when you start, it’s very easy to fall down the rabbit hole of constant improvements and additions.
For example, imagine you’re trying to create a movie rental app, where you can order a DVD/Blu-Ray straight to your house. It might be tempting to add some extra features. Maybe you could add comments/reviews so that people can share their thoughts about the movies they watched? That would be awesome! You could also add the ability to like those comments and maybe even reply to have proper conversations. That said, you could also have interest groups where people can discuss all the things movie-related. And also… Yeah, I think I’ll stop here.
You can see how easy it is to steer away from your original idea, especially when you’re really excited about the product. However, each one of those features will take time and money to develop. If you don’t think that’s a problem, just think about it. People won’t wait forever for your product. Eventually, they’re going to get frustrated or simply forget about it. Or a competitor might release their own app and steal your prospective audience. Don’t get me started on investors and shareholders if you have them. Also, the longer you’re working, the more likely it is that you will burn out or simply lose interest. You should really aim to get that MVP to a beautiful stage and release it as soon as you can. It’s not going to be perfect, but you can keep building on it.
When doing the initial competitor analysis, you might get discouraged to find that there are already very similar products out there. If they’re very popular, you might think there’s no more room in the market for your solution. On the other hand, if they’re not doing great, you might think there’s no demand for a product like this. Wrong. In both of these cases, you still have a chance for success, as long as you don’t just blindly copy what others have already done. Study their strengths and weaknesses. See what they did well, and what went wrong. Analyze, where you could improve their products or how to add some of your own, unique, approach.
Whatever you find during the competitor analysis, don’t get discouraged. This is the time to redefine your solution and make sure you’re creating a solid product. Also, make sure you stay up to date with what your competitors are doing. Don’t get too hung up on it and turn into a crazy stalker, but make sure that every now and then you check how they’re doing and see if there is anyone new you should know about. Readjust your strategy if needed.
Also, don’t be cocky. If you think your solution is the most innovative product that has never been done before, that’s great, but still, try to find what others have done in this space before you. Learn from their mistakes. Never dismiss others, no matter how small they are or how irrelevant you deem their experience/knowledge to be. Arrogance is your big enemy.
When planning for the future, it’s easy to get ahead of yourself and worry about things that might never happen. Whilst it’s good to be prepared for any possibility, it’s just as important to know when to stop. You can’t solve all your future problems, so might as well limit the things you’re spending your brain energy on. Focus on the nearest future, like 6 months ahead (this may be shorter or longer, depending on the size of your project, of course). If something is not bound to happen before that time, just leave it be for now. Don’t worry about it and focus on the more pressing matters. Remember that stress makes you less productive, and more likely to burn out. It will also affect your team/family, whether you want it or not.
Similar when it comes to development, don’t overcomplicate things. I personally love beautifully designed architecture with cleverly structured components and a lot of room for customization. However, you need to keep in mind the needs of your product. Whilst it’s definitely beneficial to design your application to be easily scalable in the future, it might not be useful to spend the time making it ready to handle millions of users simultaneously when you’re only bound to have tens or hundreds at first. Long story short, make sure you don’t spend too much time and energy overengineering things, as your biggest priority is to release your product. You can improve it later.
Staying with my point to keep things simple, make sure to check if the feature you’re working on has not been developed already. There are so many open-source libraries available on all platforms, you’re bound to find something for yourself. If you need something that’s not supported, make a pull request! It’s going to take less time than building the whole thing and you’ll add something from yourself. This is what open-source is for, after all. Only make things from scratch when you really need them (i.e. they’ve not been done before or you need a very custom solution). There’s no shame in using a ready-made component if it helps you build your product much faster.
I know the case where someone spent months developing a custom, lightweight serialization tool instead of using one of the commonly available ones. It was great at first, but as the project grew, more features were needed and the maintenance became too costly. In the end, the team had to refactor the whole product to use a third-party tool. Imagine how much time they could have saved by doing that in the first place.
Writing software is hard. Of course, it can be extremely fun and exciting, but creating a fully-fledged application from scratch is not an easy task, especially when you’re all alone. That said, make sure to take care of yourself and your health. Don’t pull 14h workdays, because you WILL burn out at some point. Your body and your mind will start sabotaging you sooner than you think. Running a startup is a marathon, not a sprint so make sure you’re ready for it. Take breaks and rest days when you need them, as they will keep you motivated and efficient. Also, remember that whilst you can always delay the launch or find a job to support development, you can’t replace or buy health. So whatever you do, don’t burn out.