Sean Li

Web App Development is Broken

Web applications are evolving fast and becoming part of our lives. We use them every day, like checking Google Maps on our phones or chatting with our friends on Facebook. Unlike the conventional perception of apps on your mobile devices, web apps are a bunch of programs and services working together. I like Paul Graham’s analogy comparing web applications to cities in his book: Hackers & Painters. Creating a web app is like designing a city rather than a single building. Besides buildings, we also need to design roads, street signs, utilities, police and fire departments, and plans for both growth and various kinds of disasters.

Design Hell

In the past decade, existing software and services were developed by the community and have been actively maintained, making web apps more and more powerful. Designing a city is tough, and so is designing a web app. Building a web application requires choosing and integrating various technologies, such as a programming language, web framework, database, search engine, task queue, cache, e-mail service, and so forth. Individually, each of these technologies has grown incredibly powerful and more developer-friendly, but a useful web app is often built with several of these pieces working together in harmony. Piecing things together requires an in-depth understanding of multiple technologies and the web stack, resulting in a huge obstacle for anyone who wants to get started on building anything functional.

Building Your Paint-Brush

The problem is that the way developers create these web applications has not improved much in the past decade. Software such as a database or a search engine is supposed to be run on servers; however, developers are still downloading, installing and configuring all this heavy-duty server software on their personal computers. Why is this a problem? Developers are trying very hard and spending lots of time to mimic a sophisticated server environment on their local computer. All this work just to get started coding, forcing them to download and setup troublesome components like language interpreters, compilers, package managers, third-party libraries, and modules. All these installation and configuration takes hours to days away from the developer’s time and can also be a brick wall for new web developers. It is like a painter having to build his or her paintbrush and paper before drawing something nice.

$7.8 Billion Wasted

I have experienced this problem first-hand in my startups and working as a software engineer for other startups and large corporations in the Valley, Canada, and China. I got stuck and spent hours trying to setup my local development environment at work just to start being productive. Sometimes even senior engineers may not be able to help, because everyone’s development environment is so out of sync with everyone else’s. The worst part is that these environments are also very different from the production environment where the app is running live. Being out of sync introduces numerous bugs and requests for emergency patches after releases.

After some research, it turns out that I am not alone. On average, a developer spends 3 hours per week on environment management tasks (Source: Electric Cloud). The amount of time wasted adds up to a month of the developer’s entire working year. If we take the average salary of a developer and the number of developers in North America, a whopping 7.8 billion dollars are lost in productivity per year in this industry, and this does not even include the amount lost from bugs caused by human error resulting from inconsistency between environments.

The Future?

What if we take developers’ environments off of their personal computer and put them on a server, where they belong? This may not have been a viable idea 6 or 7 years ago when cloud infrastructure was less developed. But recent technology has changed the way we host web applications. It is easier and faster than ever to publish a web app online, but development has not changed. This is why we are building Kite, a way to create powerful web applications in the cloud. Back to the city analogy, Kite allows you to choose what you want in a city: houses, transportation systems, power plants, police stations, etc. On top of that, Kite creates and maintains services for you and provides you a plan for natural growth.

Posted October 23, 2013

author Sean LiProduct & design guy in the developer and infrastructure space. Founder of Kitematic, now working at Docker. @lisean106