It's a good time to be a software engineer. This is software's golden age.
Software, and the global computer networks via which it is distributed, is now critical infrastructure, essential to the normal functioning of whole economies and societies.
In the consumer space, there is easy access to a never-ending treasure trove of exotic digital goods and services, some of which have reached awesome levels of sophistication in their user experience.
The methods and tools we use to make software are better than ever, too. We have an extraordinary choice of languages, platforms and methodologies at our disposal. The most superior trendsetter technologies tend to be given away entirely for free. It is now the norm for software firms to invest substantial resources in the invention of new and improved tools that facilitate the manufacture of software, then promptly waive all their rights to the intellectual property!
With the aid of open source tooling and cheap computing capacity, we have automated away many aspects of our jobs. This means we can deliver more and more, faster and faster.
Yet for all the promise of agile development cycles and lean business models, our industry is notorious for its stubborn ineptitude to deliver completed products on time, on budget and to spec.
Runaway projects — the ones that completely spiral out of control — are not at all exceptional.
The software crisis has been sustained for 50 years now. The primary function of the software industry is to improve productivity by assisting the automation of human activities and business processes. How can it be that the very same industry is riddled with such inefficiency and folly?
Developer burnout is a very real and widespread problem, too. This modern phenomenon is particularly troubling. Too often software developers are treated like exchangeable pinions on an assembly line. Software engineering ought to be regarded as a modern learned profession.
The evidence cannot be denied: we're still not very good at making software.
This is the subject of my blog.
I will scrutinise the history of software manufacture, investigate the current state of the industry and try to predict its future trajectory. And I'll make some suggestions for practical steps we can all take to do things better.
I've been engaged in software development, in some capacity or other, for the best part of two decades. As an independent consultant I've worked for all sorts of organisations — big and small, old and new, public and private — and developed technical solutions for a whole jumble of problem domains.
I have transitioned from programmer and engineer to architect and technical lead.
I'm a big advocate of domain-driven design, immutable data modelling, and test-driven iterative and incremental workflows supported by continuous integration and automated delivery. These methods I've found to be advantageous in almost every software project in which I've been involved.
I've amassed a lot of experience and expertise... and a lot of strong opinions! Now I want to share my thoughts with you. I think I have something new to say.