It is not secret that there is a huge gap between demand and supply these days when software development is concerned. This trend is nothing new but because of digital market explosion this gap stared to be obstacle more than ever.
If you are developer ask your self how many real senior developers with 20+ years of experience you know? OK, software development is young discipline but not so young.
On the other side demand started to be very complex. It is anything but unusual to see startup company these days that heavily use AI for their solution. There are plenty of products on the market with so many details implemented when user experience is considered.
So lets do a small recap. Demand is more complex than ever. Gap between demand’s needs and supply’s possibility is expending. This gap is filled mostly with young and inexperienced engineers. For me it does not sound good at all.
What kind of actions are taken by IT industry
Vendors of development tools are giving their best to overcome this problem by introducing a better tools that simplifies engineering. This recipe gave mostly good results during the history of software engineering. Plenty of new programming languages was born with more clear syntax, more meaningful concepts and more abstraction. To be concrete, this is how object oriented concept was born, my favorite language JAVA, garbage collection concept, different IDEs, etc. Ask your self how big is trade-off because of writing code in JAVA which is after compilation executed by VM as additional layer? Layer after layers, less things to care and more time to focus on solving business cases.
But not always this approach was successful. On the contrary. There were many attempts to make application development database oriented. Remember Oracle Forms or Sybase Power Builder? Their approach was that database is center of universe, you should make parameterized query which will automatically make UI for you. It even sounds bad but unfortunately many huge applications especially for business users are made this way.
Than there were even a more radical moves such as MDA (Model Driven Architecture). Approach was based on assumption that code syntax is the bottleneck that should be solved so lets use visual symbols instead of coding and those symbols will generate a code for you.
Very similar I can continue with BMPL and SOA ESB but lets focus on something that is attractive these days — serverless.
Imagine that you are making application but without back-end. Actually for back-end you can integrate SaaS based services for persistence, file storage, authentication, etc. You have to admit that this approach is far more different than thin-client principle because a lot of logic is moved to the client side.
Two most advanced players in this filed are Amazon AWS Lambda and Google Firebase. They offer a lot of tools, dashboard for configuration and analytics. To integrate some functionality you need to activate it then to download SDK for your platform (Android, IOS or Web) and to copy-paste couple of lines of code.
There is no classic back-end, database, API and all components that are common when you try to build application these days. You simply integrate services that just requires your configuration. If you need some verification or additional processing you can write a simple function that is executed as a microservice in the cloud. With this approach you as a developer is able to fully focus on front-end because production ready back-end is provided with staging environment, deploy console, monitoring, etc.
Everything is scalable and secure out of the box
Any of service that you would like to use from either Amazon’s or Google’s solution is scalable out of the box. You do not need to worry about that.
If you still need some particular functionality that requires your attention you can write some script that will run as a microservice with ability to achieve scalability if you follow the rules offered by platform vendor.
Also you need to understand that security is not your concern. For instance this is not your database but database of SaaS vendor. Vendor cares about isolation, redundancy, backup, caching, locking, etc.
Cost of functionality
What is really great with serverless is that you would be able to calculate the cost of each functionality because you are able to see how each component in your setup consumes resources. Any service has its own way of cost calculation for instance number of requests or bandwidth, etc. Having this in mind for particular functionality you as an architect can select the most cost attractive approach. For instance, not so important functionality can be queued instead of real-time processed.
Speaking about costs, implementing functionality in terms of serverless is much simpler and you do not need so skilled developer to do so. He or she do not need to know design patterns, scalability principles, anatomy of web, web services, etc. Therefore finding a developer with such skill set is far more simpler and this is the purpose of serverless approach.
The dark side
Your solution becomes complitely platform dependent and more important your solution is not just code but a lot of configurations and scripts that you made in your dashboard. This is also same for your data. There is no classic database server to maintain.
All in all if you choose to go with serverless architecture switching back to something else is very hard to imagine. To achieve for instance hexagonal architecture you will need to create facades for any functionality which is almost impossible mission since that vendor’s gave their best to make their SDKs user-friendly.
You as a solution architect should create architecture that is highly independent from: Vendor, Frameworks, Database system, Client side, etc. With serverless this is almost impossible.
The role of Solution Architect
Time will show what will be the outcome of serverless. From one side you are able to controle your costs more efficiently but from the other who will guaranty how your costs will follow the bigger usage.
With serverless architecture and bunch of frameworks that are introduced on daily basis the role of Solution Architect becomes on of the key roles in the company. He or she is a gate keeper for optimal choice that will keep your company’s solution stack healty. Keeping technology depth on optimal level has never been so important but also very much complex at the same time.
With severless this task is even harder. From one side you will get out-of-the-box scalable solution but highly dependent. You will be able to easier find developers to work on your code but your code will not be structured but instead splitted between source code, dashboard configurations, and serverless scripts.