Software development is a talent business.
For a long time, I’ve tried to understand the reasons why various software teams tend to struggle to produce good software. If you do a little digging, ask a few developers or IT managers and you’ll hear similar snippets of issues describing the problem: “We’re pulled in too many directions; our company has difficulty setting priorities; we have to manage the IT systems and manage software development; we don’t get clear requirements from our internal groups”.
It only takes a few interruptions during the day to make it impossible to solve hard problems, so that part makes perfect sense. Gathering requirements is an art unto itself: a mixture of psychology, cultural intuition, technical prowess, years of experience, and a solid process. It’s difficult to find someone who can do all of those things well, so it makes sense why that is a problem for most groups.
So, stop the interruptions and hire a good software architect, job done then. Well, not quite. The root of the problem is in how most businesses see the software development process.
The mistake is assuming software development is like either clerical work or a manufacturing line. It’s those analogies which set a fundamentally incorrect context to the software development process and force failure.
Making software is creating something valuable from nothing. It is start to finish, a creative process, where the results are completely defined by a combination of clarity of vision and quality of talent. It’s a creative act, by creative people, solving difficult human problems with abstract tools which can be used to create a nearly infinite set of solutions.
The vast number of approaches to poorly defined problems makes addressing the underlying human need for better software tools a daunting task. And that’s why construing software development as driven by training or process (like manufacturing or clerical work are), will always, and I unquestionably mean always, lead to poor software.
It’s a talent game, a process akin to making a movie, and very little like manufacturing an iPhone. The quality of a movie, while affected by good process, is defined by the combination of a quality story with the talent and experience of the director and actors. The manufacturing phase of an iPhone is almost entirely defined by the quality of the process, materials and tooling.
Software is an infinitely reproducible product where solving a difficult problem once, will essentially solve that problem in all cases going forward, forever. How well that problem is solved depends entirely on the people creating the solution. That’s why the productivity of a great developer is exponentially more than that of a good developer.
In a world where every aspect of our life is affected by software and the success or failure of our business can hinge on its quality, the business of hiring developers looks more like a talent business every day.