After almost 10 years of being software developer professionally. And previously 5 years doing it as a hobby. I now see fundamental progressing change in the way that we will be mostly (not all) doing our professional work in ten to twenty years.
The first root cause is a cloud, it started slowly offering virtual machines that we could use for specific purposes and then get rid of it. That's called IaaS - infrastructure as a service. From now on when I want some server I don't need to go to shop plug a cable and worry about the hard drive stop. I just order it via website. That's because people started thinking, what if individual components of traditional computer could be separated and served independent to themselves ? And that was big deal because someone who is making CPU or GPU intensive tasks no longer need to order big disk drive. Now I can choose whatever processor number I want, whatever disk drive size I need. That's the optimisation of resource usage, and maximisation of efficiency.
But then, there are some tasks that everyone need and doing independently using custom software like - starting from the simple ones - convert photos or videos, database access, load balancing web servers, speech to text, text to speech, translate between different languages, mapping software, 3d objects rendering .And those are now served at bigger scale, they call it PaaS Platform as a service.
But there are still some more complicated that are still not separated to simpler services like collecting and showing statistics, bug tracking, email receiving, chat, document processing, customers aggregation. We call it SaaS software as a service.
So we got one functionality that we can build upon our needs and it would scale to infinite number of users and computing power. We are only limited with money.
So we think we got it all but still we need that custom software and developers to integrate those systems to work as we want to.
As we all know the bigger the code base the more error prone it is. The bigger scale the smaller costs. Those are things that don't change.
The second root cause are containers, since it is no longer "works on my machine sentence" we can deploy them scale them using orchestrators and cluster them using different tools. We can make small programs that we now call micro services and allow us to manage smaller portions of code that is less buggy and make one functionality, we can still scale them and register our services as we want to.
But we still mostly work eight hours from 8 to 16 and don't need those services 24 hours a day. Our usage of resources is asynchronous. When Europe sleep on other part of globe people work. we don't use same resources all the time. The same is with the applications
Mostly we don't want to run our applications 24/7, we are not clicking send email all the time. When we sleep we don't need television or light, kitchen or car we need only alarm clock that would wake us up.
That means most of our tasks are scheduled at specific times all over the world.
The second one what we need to get shit done fast is information, all the systems that we are creating trough those years are in fact transforming input to the specific output.
Now when computing power is so cheap some of them are taking videos and photos and writing about colours of clothes or number of people walking to and from our store during day.
That's where server less shines. We could get document A or service B and it's information and transform it's to match our purpose using service C and if we got infinite of those micro services we can glue them together using those lambda functions. We can use this function only from 8 to 16 or whenever we want and then pay only for computing power, network utilisation and storage or store the data on our computer and pay noting stale.
We can maximise hardware utilisation to maximise profits and cut costs. We can write simpler software, we can even write this software using cloud editors.
So from now on I am more focused at looking up at clouds because there is a future.