![]() |
Site Archive (Complete) | |||
|
ABOUT US |
CONTACT |
ADVERTISE |
SUBSCRIBE |
SOURCE CODE |
CURRENT PRINT ISSUE |
NEWSLETTERS
|
RESOURCES
|
BLOGS
|
PODCASTS
|
CAREERS
|
||||
April 01, 1996
Solo Software EngineeringIf you are the development team, you've probably found that many softwareAndy Dent
A lot of books are available on managing the software process, building and guiding teams of various sizes, and software practices. I've bought enough of them to be greeted by instant smiles at my local technical bookstore. Very few, if any, of the books or big-name methods deal with the issues of one- or two-person teams: the SSEs (Solo Software Engineers). SSE can also stand for Suicidally Sustained Exertion or Smiling, Successful Entrepreneur--it's up to you. So let's look at software engineering practices for the people who can't afford them. The main techniques I'll discuss involve nothing more formal than keeping a few diaries. This should be simple enough that anyone can make the time, and powerful enough to improve your process. These techniques have been developed through years of working on my own and with one or two assistants. Major projects have included:
I was fortunate that early in my career I came under the supervision of an "old fashioned" engineering manager (thanks, Bob). We had a very small support department, and only survived on the strength of our documentation. Detailed records of what happened were life-savers when a similar problem cropped up a year later. One lesson that sank into my memory, as I drummed it into successive operators, was that searchable content is more important than formatting. I banned the use of the word processor, and we used simple text files on the VAX. Later, we graduated to the online help system because it was still easily searchable but added some structure. Something else I learned as a system manager was the difference in procedures needed for backup operators, who are usually staggering around at 3 a.m., vs. the wide-awake daytime shift. How many programmers do you know who keep going past the caffeine limit?
FUDFear, Uncertainty, and Doubt (FUD) is not only a common marketing tactic, but it all too often describes the state of mind of an SSE. Uncertainty rears its head when you're trying to remember why you made the design decisions leading to the current code. Fear and doubt emerge within that sinking feeling that the brilliant alternative you just thought of was dismissed three months ago for good reasons. Unfortunately, programmers often feel that they should be able to remember how their code works. We've had Egoless Programming; I think it's time for "Mindless Programming." This doesn't mean programming without thinking, but programming without feeling that you must remember the context and implications of what you're doing beyond a trivial local level. ("Memoryless Programming" is probably more accurate, but not as catchy a term.) Put another way, you can't afford to rely on your memory if you can't guarantee how long you'll be working on the same task. The smaller the team, the more likely that your current task will be interrupted for a significant break.
Talking to YourselfHow can one person botch the communication between different phases of an entire project? Hopefully, you don't have any problems talking to yourself (ignoring the snickers of observers), but you're not one person. You are a series of individuals with very similar thinking, stretched over time. Even when not communicating with others, the formality of writing things down can give you an extra insight, or remind you of a consequence you hadn't fully considered. You'll feel wonderfully self-righteous when you come back to a project, panic briefly when you can't remember a thing about it, then discover all these clear notes saying where you left off and what you were doing.
Diary-Based Software EngineeringThe essence of this approach is a series of diaries. The various diaries have overlapping information but distinctly different purposes. This is like documenting a design with overlapping scenarios and techniques--the redundancy helps you avoid missing any important points. You'll need the following equipment:
The Site or Project DiaryThe purpose of a site or project diary is to summarize external factors that may affect the project and to track interaction with the client. It contains:
The Random Thoughts DiaryThis diary tracks ideas without in-depth analysis. Keep it free-format so you can quickly capture ideas before they fade. It contains:
The Design Decisions DiaryThis diary provides the basis for a design decision, the supporting arguments, and rejections. This is the key diary that prevents you from wasting time reinventing "brilliant" ideas six months later. It contains:
The Code Change DiaryThe code change diary tracks code changes in enough detail to let you recreate or undo them. It contains:
Using the DiariesA classic management tactic is to delegate tasks to avoid disrupting your work flow. The thoughts diary can be useful here. Delegate to your future self. As you think of something, jot down a brief note. Don't take the time to explore the feasibility of the idea, just record enough detail to jog your memory. Make entering code changes a reflex action. As you change a function, flip across to the diary and log the change. The dated list of ideas in the thoughts diary can prevent "creeping featureitis." Ideas that seem very powerful may be worth postponing to a later version. Go back and annotate your original comments to this effect. Most important, periodically review the thoughts and decisions diaries. You may have issues in the thoughts diary that have not been resolved. In both cases, rereading entries often provokes more ideas.
| |||||||||