Code Doesn't Matter

by on February 7, 2016

Most startups use the software stack that the Technology Co-Founder is most comfortable with. This is due to the simple fact that startups have to build a lot of software in a very short amount of time. Making the act of researching and learning new skills a hindrance to short term goals.

Facebook began life as a PHP application, Google was written in Java, and Twitter started as a Ruby project. While all of these technologies have there place, they proved to be the wrong choice for long term scalability within these companies. Thus a pattern emerges.

It starts with getting a ground zero product. This is the proof-of-concept version that is slower than it needs to be, not very robust, and missing several desired features. However, none of those things matter at this stage since the entire code will be rewritten shortly. The purpose of this version is to get the company to the next phase.

The second phase is paying the technical debt in the form of a product re-development. Here the company is showing promise and either raising a Series A or turning a profit. The original team, usually one or two persons are taking on management roles while new engineers are hired. This new team’s first order of business is to defuse the timebomb of version one.

Often, a pause in development work is made to focus on process improvement. Procedures like continuous deployment, coding standards, and team rules are put into place. Afterwards, the pace of development begins to steady out into weekly or bi-weekly pushes to production.

During this phase, both Facebook and Google began to replace their codebase with more and more C++. Twitter re-envisioned their entire system. Their founders stopped coding and left the work to some of the most talented engineers available. The result is a new product that accomplishes the same task at a far greater scale and much more efficiency.

The third phase is the groundbreaking product. Now that the team has paid the technical debt of the original, they are building the features that the founders originally envisioned. During this phase, everyone is focused on growing the application to what it needs to be while making changes along the way to ensure the plan is inline with ever changing company objectives.

Now an interesting phenomenon emerges where the groundbreaking product leads to new inventions and ever improving processes of development. Here the existing tools are often not enough and engineers must create new ones to cope with the increased burden of exponential resource consumption.

Google, Facebook, and Twitter all changed their focus from individual machines to the data-center as the computer. Each creating revolutionary technologies to support their massive growth. Google created MapReduce, Facebook made ways to compile PHP to C++, and Twitter developed application services to spread the load. Just to name a few.

The point is that so many new companies focus too much time at the beginning on getting everything right. In so doing, they fail to understand what is important. At the start, it is important just to build. Regardless of how well designed the code is, it will soon be changed. Therefore go with whatever gets it out the door and functioning at a good-enough level.

Once a viable product is created, it can always be improved upon to deliver the features and scale required of it. Chances are, the technology required is not the latest cool thing, but a tried and true solution based on proven components.

Therefore, be conscious of your motivations as opposed to the specific technology when designing and coding the first version as it will affect how quickly you are able to grow. A technology focus only slows growth since it makes it harder to change. Thus, it is imperative to look at desired results first and then fit a technology to these goals.