Note: This post is based on fact #1 and fact #2 in the book "Facts and Fallacies of Software Engineering"
"People matter in building software. Tools matter. Techniques also matter. Process, yet again, matters. But head and shoulders above all those other things that matter are people"
"The point of this fact is that they (people) matter a lot"
If you've ever heard of Agile, and you probably have after seeing them in almost every job posting you've seen for software dev/eng, then you may know that the first statement in the agile manifesto is that people > tools and processes.
Now the author of this book challenges us that we don't treat people important enough. So he says - "We treat people like interchangeable cogs on an assembly line".
Which reminds me back in the day when I was working, the company I worked for would hire large number of software devs in order to fill up the few positions left out by employees leaving. A quantity over quality approach. Though at the same time I believed that the company earnestly push their employers to grow.
In a broader consideration I am reflecting on the number of tools and effort put into them for us not to screw up. Linters, npm audit, automated code reviews for just a few examples. How much focus and resource do we then put on the people aspect? What if that same amount of focus and resource was put into people development instead? How about in your working area, do people get enough focus?
That was the management stuff, now let's get down to the more hands-on parts. Consider this: in a project of two, would you prefer to have a skilled colleague working with you, or more tools (relevant to your work) in your arsenal?
My take is that I would prefer having a skilled colleague working with me. There are many reasons I can list here, but the main ones are these:
- software is the encoding of human ideas and creativity into machines.
- coding is a small part of building software
At the time of this writing the main way to achieve the former (with exceptions perhaps coming soon) is by having a human translate the contents of their brain to an algorithm, and manifest it in code. That is akin to writing a well-written prose, and that requires practiced skill.
The latter is even more important to me than the former. There are many steps to building software, and not to mention all the jumbling and juggling in between those steps. I envision a good software developer to not only be someone well-versed technically, but also in generic aspects; communication, learning, estimating, discussion, planning to name a few. While tools and processes help, I find that an individual's base capability dramatically affects the effectiveness of such enhancers.
But while I talk of how important people are in software development, just as the author said, I "don't know how to identify those 'best' people". But perhaps you do. If so comment below