...Six decades into the computer revolution, four decades since the invention of the microprocessor, and two decades into the rise of the modern Internet, all of the technology required to transform industries through software finally works and can be widely delivered at global scale.
- Marc Andreessen (Co-founder of Netscape)
We have witnessed many traditional sectors of industry being completely disrupted if not supplanted by companies that are essentially software companies. The products they sell are in many ways incidental.
Consider the following areas: books, videos, music, communications, advertising, banking and so on. We can all name disruptive companies that are famous in these industries and their key enabler is undoubtedly their use of software.
See the following for a full account of Marc Andreesen's salient statement, Software is eating the world..
The Software Company
A software company is one that recognises that at its core, it is software that runs everything.
Software is key and the key.
Software, ultimately, is binary code represented in silicon, doing our bidding.
By Zephyris - Own work, CC BY-SA 3.0, https://commons.wikimedia.org/w/index.php?curid=17139158
Where does binary code come from, except from coders.
That is, someone who uses a language abstraction to create the instructions for the machines to follow.
Although the initial idea is of course the ultimate reality, to bring that idea to life, we need code and with that the coder.
A business value stream needs many actors, each doing their vital part in producing needed outcomes and benefits.
While all these players are obviously necessary, in the end without code there is nothing to show for. It's the code the runs it all and is characteristically a malleable entity open to being morphed.
This then is our real first cause, the code.
The companies that realise this have already raised the profile of those persons, traditionally the developers, and their importance in overall software delivery. The delivery of software itself is now code, with the promise of automation and repetition.
Coders are now an important part of key business decisions. This has been highlighted in part by the DevOps movement, in that Developers, read coders, are now part and parcel of the whole delivery.
The adage being we build, we run.
Another important step change comes from the agile camp. Here we see how the persons committed to the delivery are encouraged to be empowered over those who are said to be merely involved in the delivery. The ones fundamental within the committed set are of course the coders.
True, a good coder will have an in-depth knowledge of the vagaries of a coding language or languages, but this is not enough. Also needed is vision, imagination and creativity to craft one's code with a certain beauty and simplicity. With this comes a desire to solve problems and to keep learning.
The idea of a code monkey blindly writing code to some handed down specification is a fallacy. Architecture and specifications need to adjust, to emerge, from results seen at the coding level. A combination of analysis and synthesis.
A coder will display a knack of seeing what is really necessary in a process or system through the power of having written actual code to prove a hypothesis. They will want to deliver the best while being aware of the many related areas. Perhaps this is why we are starting to see the term software engineer. We look for those cognisant of various aspects of software delivery such as coding, built in testing, integration, performance, monitoring, deployment and support. This is with a view to engineering the whole.
Nothing motivates a coder more than seeing their code working in production. A team I once had the privilege to work with, were so much more effective and responsive when empowered to deploy their code all the way to production. This provides the satisfaction of having created something serving a true purpose. Even better when that has been achieved as a team.
Talent and Team Work
A high performing, self governing and cross functional delivery team can quickly, within a short time, visibly add value to the business. Within the team, focus has to be on the generation of code. There are a range of abilities among coders, of these there are the rock stars.
Rock star coders usually come with their own baggage. Producing overly complex code that only they can understand, an inability to work in a team, an arrogance which refuses to accept work from others or to admit mistakes and so on. Of course, not all stars are like this, some really do shine.
In fact a group of rock stars perform less well than a group of average coders who in contrast collaborate and work as a team. The myth of a rockstar developer discusses this in detail as does why we fired our top talent.
The balance of talent with character is therefore important.
My biggest mistake is probably weighing too much on someone's talent and not someone's personality. I think it matters whether someone has a good heart.
-- Elon Musk
Culture and Coders
Integrated development and continuous delivery can only happen within a corporate culture that empowers its software developers and refines its IT and R&D reporting structures. From: https://www.mckinsey.com/business-functions/digital-mckinsey/our-insights/beyond-agile-reorganizing-it-for-faster-software-delivery
A culture suitable for a modern software company needs to adopt true agile, lean and devops practices. Central to this is the empowerment of those writing the code.
A self governing team, one that is able to own the whole process right on to production, provides numerous benefits and faster speed to market. We have examples of companies that deploy new features to production on a daily basis, some with multiple deploys a day (https://techbeacon.com/10-companies-killing-it-devops).
Forecasting is more accurate as teams are able to provide estimates that reflects true business value. Hand-offs to other teams, usually with undefined SLA's, make it impossible to gauge true team velocity. Forecasting the delivery of product increments or the overall roadmap is only possible when teams are empowered to own the whole.
Within product delivery, everything can be considered as code including the engineering of the delivery process itself. Configuration, environments, data, applications, testing, operations, business processes, governance, and security. Everything in the delivery process can be viewed as code, version controlled and audited.
Therefore in all these aspects the coder is integral, not only in writing the core application.
A cross functional team with all the skills needed in the team, empowered to deploy software on demand is a vital cultural characteristic.
The team is then able bring value to business rapidly, adapt quickly to changes in the business environment and influence the market.
This requires decentralization of traditional responsibilities and putting the keys in the hands of the cross functional delivery team.
Another characteristic is that of both business and engineering teams working closely together using the concept of ideas and validated learnings rather than a handed down list of requirements months in advance.
A third aspect is that of moving from a project focus to a product focus mind set, with funding based on a set time or scope, but not both.
The Coal Face
Genba (現場, also romanized as gemba) is a Japanese term meaning "the actual place". Japanese detectives call the crime scene genba, and Japanese TV reporters may refer to themselves as reporting from genba. In business, genba refers to the place where value is created...
Business value is so tightly related to creation of code that walking the gemba, listening to those at the coal face, the ones writing the code brings huge benefits.
This allows inclusion of ideas from those who are at the critical point of the delivery. These are the ideas that really help improve delivery and business outcomes.
The Power of Code
If you are involved in the software world, you might have heard of DotCloud, if not you've certainly heard of Docker. Written by Solomon Hykes of DotCloud, Docker is a piece of containerisation software. Docker is now ubiquitous in our world and has replaced the original company's focus so much so that the company has adopted it as its brand. This is some coding.
Much code is now open source and helps drive innovation in many software companies. Companies that in the past would have relied solely on proprietary software.
A few open source projects to warm your heart:
Linux, MySQL, Eclipse, Kubernetes, Tensorflow, the HashiCorp set (Vagrant, Terraform, Consul, Nomad, Vault) and Docker.
Grow and Nurture
In the marketplace, finding the exact fit of person for our precise needs is increasingly difficult. We and countless others are chasing the same unique star.
Additionally, we live in a fast moving discipline. What is in vogue today is very likely to be superseded within a relatively short time.
Consider the talent pool within. Can they be developed, trained and empowered to become high performing individuals?
Could we instil an engineering mindset that builds excellence and innovates as a norm?
Giving our coders room and time to write or contribute more widely, such as to open source software, is an excellent way to grow and nurture coding skills.
The coder is too important to be an incidental bystander within software delivery.
Many long established companies, in recognition of this, in their transformation process, are also providing the right cultural environment, facilities and tools for the coder.
This then greatly helps in the engineering of the complete software delivery and so provides a real enabler for success.
Everything is being run by software and that software needs to be coded, at least for now.
Software is eating the world.
The views expressed here are derived from many years in the software industry and are entirely my own. They are not related to or representative of any specific organisation.