Product, process, people

How I categorize every piece of knowledge about software development

I believe there are three components to solid software development company: products (any artifact basically), processes and people. To become successful, the company must focus on improving each component, but it takes different amount of time and effort to improve each.

Improving a product the company delivers to a customer takes the smallest amount of effort: just fix a bug, and the product has been improved by a little. It is possible to measure both the number of closed issues per unit of time and developer hours. The improvement is obvious, and it takes a great deal of authority to reallocate some effort to improving the other two Ps.

Improving the process requires vision, patience and authority. For example, using a distributed version control is a process improvement, but it might be a scary transition for a team. In the short term it will actually slow down the product work! Common process improvements besides using git or hg are switching to test-driven development, agile planning, continuous build and deployment, measuring complexity metrics and unit test coverage. The most important factor when improving the process I believe is to make the most common and desired system behavior the default. For example, when running unit tests, collect the code coverage by default. Avoid requiring a long number of command line switches to achieve this, because the better process should simplify life, not make it harder.

Finally, improving the people is strictly a long term goal, it is the costliest and fuzziest investment a company can make. Examples are project based interviews, training new developers like you were a loan shark, sending devs to training and conferences, organizing software engineering brown bag lunches and book clubs, shadowing sales teams, open sourcing projects. A big part in improving the people is boosting the team's morale. Make developers feel appreciated by listening to their concerns. Ask yourself: on the next sprint's backlog, how many items were added by the engineers and not the external product owners? If none - the engineers are probably thinking their opinion does not matter!

In the long term, the productivity order is reversed. Invest in people, and they will improve the process, which will drastically improve the product.

I have looked through my blog entries, and split posts into these three categories. There are more entries concerning specific products than processes, and there are only few posts about improving people. For example, this post is about improvement process; it is in the process category.