The Future of Web Development

I’m lucky enough to have been around when the internet became publicly available 20 odd years ago and I’ve seen websites change from being simple HTML documents into massive web applications with dozens of developers working on small parts of a large site. I’ve also watched the tool chain get more and more complex, the total separation of frontend and backend development, the rise of RESTful services, Infrastructure as a Service, Javascript MVC, the list goes on and on.

Javascript MVC and complex build pipelines for frontend development are probably one of the most fundamental changes, the total decoupling of frontend and backend has given rise to the whole Software as a Service movement where companies expose the same API they use to the internet to enable amazingly powerful systems to be created that leverage dozens of external systems. As a developer this is incredibly empowering and also fun as you can get a lot of work done with very little effort by taking advantage of systems that are managed and maintained by external companies.

HTTP2 looks very promising for drastically simplifying the current frontend build pipelines and improving the responsiveness of the UI. The move to MVC on the client side has added a huge amount of complexity to the frontend requiring NodeJS and specialised build tools (Grunt and Gulp for example) to enable developers to work productively but also build an optimized artifact for deployment.

Infrastructure as a Service (IaaS) or “Cloud Computing” has exploded with AWS being the dominant force in the market currently and players like Google and Microsoft investing heavily in the sector to catch up. IaaS has fundamentally changed the way websites are delivered to market, scaling infrastructure is now a thing of the past for 99% of websites on the internet due to the flexibility that these IaaS companies provide. We are now in the age of Platform as a Service (PaaS) where all the underlying complexity and infrastructure management is completely abstracted away and a simple YAML file is all that is required to declare the state and minimum level of replication required for an application. This is the age of containers!

We are still in the infancy of containers however it would be foolish to deny that Docker isn’t the absolute powerhouse for application containerisation currently. The interesting thing is that we can now develop in a container, and then ship the container through its various environments all the way to production. Ironically Google are the most likely to rise to power in a container driven world as they have the most experience running massive containerised implementations.

Currently lots of people are using interpreted languages like PHP, Python, Ruby, etc and building out their containers from known Linux distros like Ubuntu, Debian, Centos, etc. This gives the container a large footprint, Ubuntu for example is at least 200MB before you start installing packages. I’m particularly interested in this space as this seems crazy to me to have such a large starting point just to serve some generated HTML. Building containers using busybox or Alpine Linux is the next thing people try to get their containers down to a small size as the base layer for these distros are around 8-10MB, a fraction of the size of a full blown distribution. This is great, we’ve reduced our footprint significantly however we can do better…

I’m of the option that we will likely see the meteoric rise of the Go language over the next few years. The reason for that is Microservices. Microservices are small discreet services that do one specific thing and do it well, essentially the unix philosophy for Service Oriented Architecture (SOA). The great thing about GoLang is that you can create statically compiled binaries which means you can ship a single binary file in the scratch Docker container which is the smallest possible footprint for a container and the ultimate in simplicity. The performance of the binary is in a different league to the interpreted languages and GoLang is an incredibly simple language with beautiful syntax (this is my own biased opinion). No Linux distribution, just a single binary file, if that isn’t elegant I dont know what is?

I strongly believe that HTTP2, containerisation, microservices and GoLang are going to be fundamental to the next wave of web development. I think that Google will be the player to watch in this space from an IaaS/PaaS point of view however they need to open data centres in Australia for Google Cloud Platform if they want mass adoption by the Oceanic market.

Initial thoughts on Google Container Engine

I’ve just started playing with GCE and so far I’m very impressed. I containerised my blog this morning and deployed it to GCE without any problems at all. Kubernetes has been an absolute pleasure to work with and makes deploying containers into a cluster extremely simple.

I currently work as a Devops consultant and while I get to play with Docker more or less daily, I’m yet to deploy containers into production. The next few weeks will revolve around watching the metrics and uptime to see how stable Docker containers are in production. I’ll also do some load testing to see how my Kubernetes cluster performs under duress.

Definitely more to come…