Subcontracting is stupid. I used to believe in this statement with all my heart. Especially outsourcing software development gave me an image of big balls of mud being produced by a faceless herd of Elbonian programmers. Most of all paying for software development felt like a useless waste of money, which is among the biggest sins for a startup. For these reasons, when Tekes (Funding Agency for Technology and Innovation) granted the first funding for Headsted, I had already made up my mind that outsourcing software development would only happen over my dead body. And that’s basically what happened.
In the beginning of the Tekes-project, we had already received a lot of positive feedback. The first responses from user questionnaires were repeatedly similar to the North Korean elections: Over 95% would recommend our service. However, I was still surprised when our humble service began to attract even bigger audiences in press and media. Getting more and more distinguished led to more and more technical problems. When these scattered little things — bug fixes and other technical support — began to pile up on top of the actual product development, our product development processes got all tangled up.
For a while we were in the eye of the storm, but eventually we managed to get ashore on dry land and decided to make sure this would never happen again. An experienced software development expert would have probably detected this problem early on and recommended procedures that would have allowed us to avoid this situation in the first place. The money spent in the beginning would have easily paid itself back.
Our MVP was developed in two weeks using WordPress and Flash -technologies. It would’ve never scaled for thousands of users and different end devices. We began to develop a new platform from scratch. For foundation we chose Django- software framework and a bunch of other tools I had no previous experience on but luckily, self-confidence is one of my greatest strengths. We also received a lot of well-intentioned advice such as “Just do it very roughly in the beginning, and when the money starts flowing, you can afford to buy a new implementation.” That was a foolish advice.
From this baseline we ended up in situations where the code had to be substantially refactored repeatedly, because its sustainability and performance were a big pile of excrement. The fact is that your average Sunday league coder’s well-designed architecture is no match for an expert’s intuition. An expert would have known, when leaving some rough edges is possible and even economical, and when the technical debt grows too big. We could have avoided spending large amounts of time for a job that our users never benefited from.
The life of a startup entrepreneur is chaotic. In the morning you’re supposed to make calls to possible clients without any leads, upon lunchtime code your new prototype, in the afternoon compose contracts and in the evening you should be networking in a cocktail party. Steve Blank has said something along the lines that: for a job like this you need a specific type of personality. However, it doesn’t mean that you should pursue the chaotic lifestyle, or that you shouldn’t try to avoid it.
In my opinion software development is one of the most easily outsource-able tasks, because it’s based on solutions proven effective. The real innovation and competition is in designing of services and fulfilling the client’s needs. The best case scenario is when you manage to choose a software company that has experience in working with a startup. This type of partner understands how to search for the perfect product and model with lean design, in which case a software job can support the development of your business with the best possible way.
When the practices of software development are good and the structure of the software is on point, less time is needed for unproductive work and fixing mistakes. Good software architecture saves time in the development, testing and maintenance of new features. As many wise people have said: quickness is a startups only advantage when competing against companies with much bigger resources.
Before you reach this carefree state of productivity, you must do a lot of background work and planning. You see, it’s not indifferent which software company you choose and what kind of a team you start working with. A team that has developed gigantic enterprise- systems is probably proficient in their own comfort zone, but bringing them to an agile startup-operation leads to a catastrophe. From this baseline surprisingly many startup, regardless of their best efforts, has ended up operating with a waterfall model. Time is spent developing architecture and defining functionality even though there is only a wild guess about clients and their needs. Therefore, choose your partner wisely and make sure that the software development is executed with some kind of an agile model.
Headsted has been quite lucky because our background work and the mapping of our clients needs, which was done with our MVP, was enough to find a so called product-market fit. More often than not a problem is discovered and the solution requires special technological knowledge such as an integration to patient database or a mobile app. A software company usually has an employee with adequate expertise and knowledge from a previous similar project. Finding and hiring a corresponding employee to a startup could be difficult, and the recruiting process itself is painful and time consuming.
Your software is now top notch. You can manage your time better, the risks of software development are more controllable and you stress less. At the end of the day, the result isn’t a big ball of mud, but quality code. As an addition to your happiness, you now have amazing co-workers. The good vibes of their employers flood to your company.