In the name of God, stop a moment, cease your work, look around you.
— Leo Tolstoy
A program is made of a number of subsystems. Each of those subsystems is composed of smaller parts—components, modules, classes, functions, data types, and the like. Sometimes even boxes and lines. Or clever ideas.
The jobbing programmer moves from one assignment to the next; from one task to another. The working day is composed of a series of construction and maintenance tasks on a series of these software components: composing new parts, stitching parts together, and extending, enhancing, or mending existing pieces of code.
So our job is simply a string of lots of smaller jobs. It’s recursive. Programmers love that kind of thing.
So there you are, getting the job done. (You think.)
Just like a small child travelling in the back of a car constantly brays are we there yet?, pretty soon you’ll encounter the braying manager: are you done yet?
This is an important question. It’s essential for a software developer to be able to answer that one simple request: to know what “done” looks like, and to have a realistic idea of how close you are to being “done.” And then to communicate it.
Many programmers fall short here; it’s tempting to just keep hacking away until the task seems complete. They don’t have a good grasp on whether they’re nearly finished or not. ...