With all the talk about chip manufacturing, I have been thinking back to the things that make any software economy work. I suppose you can slice and dice the ingredients of a software ecosystem in several ways. I, however, have arrived at the following 7 layers of expertise that current software ecosystems rely on, to drive commercial and economic value (from the bottom of the stack):
- Chip Instruction Set: a set of instructions that can (more of less) execute directly on the chipset. They are represented as mnemonics (such as MOV for move, or ADD for addition). Such instructions represent the most primitive form of operations a microprocessor can perform (arithmetic, conditional) on a given set of inputs, to emit an output or alter the flow of code.
- Compiler: This is a program that translates code that human programmers write in “high-level” programming languages, into machine code that uses the chip’s instruction set. Such a program does many things, but its most important function in recent times has been to find optimizations in human-written code, so that it can run faster and use less memory.
- Programming Language Design: Before you can write code, you need a “high-level” programming language. Designing such a programming language is both an art and a science. And a lot of innovation happened in this space that gave birth to a number of programming languages (e.g., Rust, Go, Typescript) that have offered programmers with new ways of expressing logic and procedures.
- Code: This is what software engineers deal in, on a daily basis. Colloquially, software engineers turn coffee and pizza into code. 🧑💻
- Operating Environment: Engineer-written code never executes in isolation. Programmers need to think about what where their code is going to execute. Will it run in a specific operating system (macOS, Linux, Windows, Android, iOS), or a web browser (Chrome, Safari, Firefox) or other virtualized environments (e.g., Java Virtual Environments) that abstract away complexities of underlying execution environments.
- Software Development Kit: Even with a well defined operating environment it is rare that programmers write code from scratch. Decades of progress in the space of open source software ensured that we have packages or libraries of pre-built code that we can use as launchpads for fancy, new software programs and products. These packages are called Software Development Kits, and they are often referred to as SDKs, frameworks, libraries, APIs.
- Applications: Apps are what engineers end up building and shipping to end-users to offer value (either in the form of productivity, entertainment, or anything else there is a market for). Every other layer needs to work for devs/teams to write and ship apps.

This is not to say that every software engineer, or team, or organization need expertise across all 7 layers. However, an industry as a whole needs these 7 key ingredients to create a commercially sustainable industry for software engineers and app developers.
Future versions of a thriving economy built atop software and digital infrastructure may not need all of these layers. To imagine what might be possible tomorrow, it is useful to see what works today.
The notable thing I am missing from this stack are computer networks. More on that in a different post.
What do you think are the key ingredients in making a software economy click?
– vkp

Leave a comment