/ Development

From product makers to service providers. Thoughts on the evolution of software development

We used to ship products.

We were craftsmen, artisans as Laravel calls us.
We spent months planning a project, writing the code and polishing rough edges (well, not everyone always did this part, to be honest...) before releasing it, so that our users don't find any problem.
When users wanted to use our software, they had to buy it, and then we shipped it to them either as a download or on a physical media.
They owned the software, and even if they were not allowed to do everything they wanted with it, they didn't have to talk to us longer that needed.

That sounds like a great idea...
This is no longer the case.
Gone are the days of software as products, gone are the days of downloads and installations and updates and...
Well, ok not yet. But I can see it coming. The Software as a Service paradigm is starting to take root in Software Land and users are already accostumed to it. Take Google's cloud services like Gmail or Inbox, Google Docs and Drive.
Take YouTube, or Skype Web.
Even take the whole concept of smartphones, the most common and diffused personal devices of the entire computer history.


People are starting to see the Cloud as a growing and powerful computing platform, and I'm not only talking about students writing notes on Google Docs. I'm talking about big companies moving away their local infrastructure and start using IaaS like Amazon AWS or MS Azure, and developers like me who don't need to send their software to a sysadmin with a full deploying manual to see their applications running.

For instance, at my current workplace we use a private instance of Red Hat OpenShift to deploy dev versions of our solutions. It's easy to use and does a great job at keeping the complexity away from developers so that they can focus on coding full speed ahead.
We no longer have to buy machines to run our business[1]. We just use a web browser and deploy our software.

You can hide all of the hardware-related issues and keep your dev team up and running working on new features without sacrificing the user experience.


And it's even better on the user side: hardware cost is going down.
There is no more need for powerful computers or portable devices, cheap, high energy efficient hardware can run all the modern computing tasks leveraging the power of a remote machine.
Some took this idea and brought it at an insane level, with cloud IDEs and developing tools like Eclipse Che, Codenvy (which uses the aforementioned Eclipse) and Cloud9, which let you code and develop software as you were on your computer, but from a web browser.


Chromebooks are a great example of this shift in mentality. Laptops that exist with the sole purpose of running the Chrome web browser and entirely rely on the power of the cloud to provide mainstream users with the light productivity and content consumption environment they need, sold at low cost and with very low specs.
They are the quintessence of the as a Service philosophy, of the distributed world we are building right now in the software industry.


It's easier and more secure

When a new version or patch of a software came out, we had to inform our customers that they could update their apps. They didn't always listen. Even with some forms of auto-update, security risks still existed and legacy versions maintenance still had to be done. LTS, Release Candidates, patch, hotfixes, too much complicated stuff to handle for a poor user that just wanted to write a spreadsheet.
With a cloud-based approach, by distributing your application as a Software as a Service, you move all of that burden away from the user's machine. Security updates and new versions can be deployed directly on your infrastructure and be immediately available to your users. Forget about updater and download links, users will have the latest versions without even noticing it.


But there are drawbacks too

Of course nothing is perfect in our world, and so it is in the software world too.
By moving all the computation to a cloud infrastructure you are increasing the computational needs on your side. Higher needs means higher costs and a more complicated backends, possibly fault tolerant and redundant so that your customers don't have to experience any downtime or data loss.


There is still a lot to do

We'll get there someday. A world of shared, distributed computing with close-to-zero complexity for the end user, high abstraction for the developers and easy, standard platform maintenance for sysadmins.
We're not quite there yet, but with the right effort Service Land can become a reality in no time.



  1. Well, we still had to rent a server on which to run OpenShift Origin. But if we used the commercial version, it would run on Red Hat's infrastructure. ↩︎

Matteo Joliveau

Matteo Joliveau

Avid gamer, love coding and thinkering with tech stuff. Currently working as a Java backend developer at Koor Group and TechGap Italia.

Read More