Three years ago I have read the book Getting Things Done of David Allen. The time was very interesting with the fact that at this moment I was developing a software for spinal cord surgery operations and I was trying to be in a top state. The advices of this book help me a lot to reduce the stress when I implemented the software. The magic in David Allen’s approach is that you store all your thoughts from your head on a “hard copy” every time when you have some idea which is out of your “working stream”. Believe me I have a lot of thoughts(bugs) in my head. After you have finished with the last task you choose the next urgent task and start working on it. After this task you take the next important task and keep working on the new task and so on.
More than a year after that I read the book “Code Complete” of Steve McConnell and I like a lot the chapter “Pseudocode Programming Process” which help me to organize my thoughts before I start implementing a given task. After reading of these two books I read an interview with Charles Simonyi the author of hungarian notation and employee of Microsoft into Dr. Dobb’s CD-ROM Library. In that article Charles Simonyi mentions how in Microsoft the software gurus implement the “main architecture” of a given task and they give chance of their juniors to implement the mundane parts.
All these experiences help me to do a lot of experiments with my self and finally I get to my approach in the software development which is like “getting things done” and reduce the mental load. The first step in this approach is to collect all my thoughts regarding the task which I have to implement into a list with tasks. This step help me to reflect all my worries which are related with implementation of this task and to reduce the stress just because every thought is stored and I couldn’t miss anything. After this step I keep searching for some tasks which I haven’t noticed. Sometimes the tasks are not visible at first glance. On the next step every task from the list is moved into the source code like a to do task with a specific tag. For example if I am implementing quick sort algorithm my tag is “//TODO [Quick Sort] 1”. The task has also a main number. When all tasks are moved to the right places for implementation I start breaking the first task to subtasks. The purpose is to divide the task up to nine subtasks. These sub tasks are put with dot after the first number so our tag is similar to this one “//TODO [Quick Sort] 2.7 “. I can keep separating to sub sub tasks if it necessary but in most cases it is not necessary. When I am ready with the breaking of the first task I start implementing the first task with all sub tasks. The result of this break is so small steps that you don’t have worries to implement every sub task in a five minutes. Also you can search by tag and follow the whole chain you have to implement in all source files. When a given sub task is ready you can change the text “TODO” with “DONE” just to know where is the last implemented sub task. The process of implementation finish when all tasks are finished in this way.
The most important feature of this methodology is the fact that you don’t need to load the whole context of the task which in most cases is bigger than we expect. Also if you read the article “The Magical Number Seven, Plus or Minus Two: Some Limits on Our Capacity for Processing Information” of cognitive psychologist Geroge A. Miller you will know that our short memory can store between 5 to 9 chunks of information and we use our cognitive capabilities in the best way.