This post is part of a series of posts with my personal notes about the chapters in the book “The mythical man-month” by Frederick P. Brooks. I write these posts as I read through the book, and take notes on the concepts I find more relevant. I do, however, advise reading the book to get the full benefit out of it.
The work quality and efficiency of a crafter depends a lot on the tools at hand.
In this chapter, Brooks makes a case for this statement validity for software developers as well and gives a list of essential tools needed for software development.
For management concerns, the rule of thumb is that each developer should not need to maintain their own set of tools. They should be provided, by the employers, with the best possible set of tools that will allow them to be as performant as possible: It will make software development cheaper in the short, medium and long term!
This, however, does not invalidate that a developer has his own custom tools that fit its personal workflow and preferences.
The list of tool types that we need to philosophise, plan and organize are as follows:
Computer facility
We need good computers, adequate to serve as
- Production machines;
- Testing machines, as much as possible similar to the production machines and on demand;
- Development machines, for developers to use as they please.
Operating system
We need a development system that can simulate the actual production environment, so that the developers can develop and test in an environment that will behave like the production system so that behaviours and problems can be anticipated.
Language
The system must be programmed in a language that is appropriate and favours/makes it easier to build the system we aim to build.
Debugging aids
Some way to do quick and easy debugging of the system, both interactive debugging while the system is running and historic debugging through logging mechanisms.
Test case generators
A test framework and test suite that can be further developed as the application grows, and can be run on demand as part of the development and build processes.
A text processing system, for documentation
A documentation system that makes it easy to document any aspect of the application being built, as well as making it easily accessible to any stakeholders.