I am a software developer. I have always worked for small to medium sized companies, between roughly 10 and 100 people. When I first started my professional career, I had been trained to write good software. I learned about software development processes, programming languages, databases, testing, algorithms, requirements, and all sorts of things that make me better at writing software. I was hired as a software developer and was assigned software to write, so I wrote it to the best of my ability.
But that’s all I did, I wrote good software. And by itself, that’s worthless.
I write software to get paid, and that money comes from customers paying for products or services. When I write software, I do it as a part of a larger human system that takes customer problems, builds solutions for them, and sells the solutions so we can all keep getting paychecks. If any part of the human system stops working, the paychecks stop coming.
The first time I was confronted with this reality I was working on a team with one other developer and a project manager. In every status meeting we reported that we were on track to deliver the product on time, but when that time came we discovered that the other developer had a different definition of “done” than the rest of us. The product was late and we lost some future business from that customer. The blame for that failure was mostly laid on the other developer, but a little of the blame went to everyone. We should have been integrating our code the whole time. We should have demoed it to each other, or reviewed each other’s code. Doing those things would have exposed the problem much earlier. Beyond our assigned jobs, we all had the responsibility to ensure that everyone else was doing their job so the human system would be working properly for the client.
When you begin to consider the whole company as a human system, you can break it down into components and measure it like an engineering problem. (It will be an oversimplification, but it will do for our purposes.)
- Marketing’s job is to find random people most likely to buy your product and make sure they know about it and where to find it.
- Sales often has two functions, taking random people and converting them to contacts, and later, showing those contacts how your product can improve their lives so they buy it.
- Product Management takes data about customer problems, desires, and psychology, and creates a set of product requirements that meet customer needs, while still respecting business realities.
- Technology turns product requirements into a working software product, and keeps it working when customers start using it.
- Customer Service receives customer problems and complaints, keeps them working when the technology fails, and feeds info to product management when the product doesn’t meet their needs.
- Finance tracks the money coming in, and makes sure it exceeds the money going out.
- Management motivates employees to do their job, makes sure they have what they need, and keeps roadblocks and distractions out of their way.
All of these functions are required to keep customers happy. They aren’t always manifested in separate groups of people, but the tasks exist at every product company. If your company is lacking any one of them then you’re running on borrowed time. It’s essential to restore that function before the paychecks stop. That’s explicitly management’s job, but if you see the problem and don’t bring it to management for a solution you may be looking at the seeds of your own unemployment.