Ever since Maurice Conti’s talk, about generative design, I thought about applying this to software development. In Generative Design, CAD software explores the solution space to find an optimal solution using constraints and objectives given by the user. For software development, I call this Generative Design for Software.
When comparing software development with mechanical engineering and industry, it feels like we just finished the First Industrial Revolution.
The Industrial Revolutions:
|First Revolution||Mechanical Production||Steam, Water||1765|
|Second Revolution||Mass Production||Electricity||1870|
|Third Revolution||Digitalization||IT, Electronics||1969|
|Fourth Revolution||Industry 4.0||Internet, VR, AR, Cloud||Now|
We just made it from reinventing the wheel over and over again (fixing a spoke with hand tools) to sharing libraries via GitHub (order spokes as components) and the use of platforms and frameworks (order wheels/set of components). So in a sense, the driver (steam) is the connected world.
Software Mass Production – The Second Software Revolution
Software developers bare with me. I know development is a creative task and what’s coming next is a stretch. 🙂
Following this thought process, it would be logical to next progress using standardization towards the Second Software Revolution (software mass production). And in a way in the past this trend showed from time to time when yet another code generator or a low code platform was born.
As a result of the Third Software Revolution, the code will be generated by providing (business) objectives. The algorithm then solves for an optimum independently. By using Generative Software Design, the glue between the modules and maybe the modules themselves are optimized. A computer explores the solution space for the best design.
Software Mass Production Prerequisites
- All existing libraries need to contain a standardized description and have some form of unified interface (Think swagger on steroids)
- Transforming the non-compliant, existing libraries with an automatic wrapper mechanism would be incredibly helpful
- Algorithms to identify common code segments to be standardized and carved out into a library
- Algorithms to identify common, standardized code segments and suggest them during programming or refactoring
In a way, this scenario seems to be unavoidable. It might take time but if you compare code today with code ten years ago, there is a very clear trend towards libraries. The type of code changed as well. Where twenty years ago we implemented ring buffers, you find nowadays code defining the data flow between distributed modules.
Smart Software Libraries are the first step
Before thinking about generative design for development, smarter libraries would allow progressing and focusing on new, more complex topics. We are just at a stage right now where standardization would add structure to this. This allows companies and individuals to focus on creatively solving business problems while paying less attention to knowledge obsolescence.
Change in Workforce
This has implications. While coding gets more powerful on one end and more automated on the other end, higher skills are required to work in the industry. As of today, 18.2 million employees work as software developers.
In the First and Second Industrial Revolution, the change in the workforce was relatively slow because for example not every company was able to afford a steam engine.
Many jobs shifted toward creativity and people skills. It’s not by accident that roles such as marketing, human resources management (must read Peter Drucker), production, finance, and functions of management had to be created just for this new era.
Further Thoughts – Repeating Pattern
It might be interesting to do some research on repeating patterns in technology. While technology evolves, knowledge of these patterns might be useful to analyze and predict for example security concerns or implications for society.
Generative Design for Software Conclusion
As always, innovation requires the willingness to change. For the industry more standardization in software modules could enable enormous gains. To do this is and eventually progressing to more automated software development, if it is at all possible, will require a lot of work.
With a Second Software Revolution, the change of the required skillset can happen in a couple of days. This is why I believe, in a time of specialization, it’s important more than ever to get a broad skillset.