Was reminded of Paul Graham’s 2009 blog post “Maker’s Schedule, Manager’s Schedule” recently. The article sums up why programmers dislike meetings and if I may add, anything that disrupts their intense train of thought while programming – phone calls, incoming Skype chats, reports, etc.
Before I blabber on, let’s play a simple game to help us understand the maker’s schedule. In this case, the maker is a programmer. Draw a 10-by-10 grid and label the rows and columns A to J. Fill each cell with a random digit from 0 to 9. It should look like the following:
The goal is to memorise the grid in 5 minutes, after which you will be asked to read out the grid (without looking), tell me the digits at certain coordinates (eg. row C, column H) and finally, read out the grid in reverse. Now, suppose that every 5 to 10 seconds I interrupt you and ask you about your progress, how you are solving this problem, what do you plan to do next, whether you are on schedule, get you to attend a meeting/call and even do mini-tests along the way…you get the idea 🙂
How do you think you would feel? Even if you were to ignore me and not answer my questions, you will most likely be distracted and feel frustrated, and you will likely miss the goal. I have tried memorising a 10-by-5 grid in 3 minutes (my boss back then was pitting me against a vendor selling memory enhancement techniques; thankfully I won and thus kept my job lol), so the goal is achievable, only if there’s no distractions. This is also why I do not sign in to Skype while I am coding.
This is how a programmer feels when he is programming. Translate the goal into a project deadline or milestone deliverable and the interruptions as seemingly legitimate progress tracking, daily/weekly reports, meetings, etc. Programming requires intensive focus – there’s a lot of thinking involved plus the holding of a huge information load in our heads while thinking, such as variables, classes, dependencies, control flow, algorithms, syntax, compatibility, extensibility, maintenance, change logs, etc. Think of it as a 1 million by 1 million grid 😛
Focus aside, programming is a lot like writing, in that we don’t always have output. Some days, I would just stare into blank space and think through everything in my head but not write a single line of code. Sometimes, I would go into a marathon mode from 8am to 6am the next day – I would achieve a lot in terms of the project (like one week’s worth or more), but I would also be knocked out the next day, half-dazed the day after that, and operate at 50% efficiency.
And reports? I generally have to stop my programming, which is the actual work needed to finish the project, and spend an hour or two listing down what I did for the day, the changes, the reasons and write down whether I can meet the schedule. And when the report is done, I can forget about continuing my programming for the rest of the day cos my train of thought has been broken and it may take a few hours to overcome the inertia and “rewind” to the point where I left off. If a typical man-day consists of 6 productive hours and say 4 hours are spent on actual coding, the report basically halves the time I have on the project. Weekly reports are fine, but daily reports are a killer, unless you don’t mind me writing one-liner reports, eg. “Database design” 😛
Mutual trust and professionalism are important. As a professional developer, if I agree to a project timeline, I will do my best to meet it, but I must be given the freedom and trust to plan my own schedule. I may work 9 to 5 on Monday, 2 to 4 on Tuesday, pull a overnighter on Wednesday, sleep on Thursday but I will deliver the weekly deliverable on Friday. If I were to clock 9 to 5 everyday, I would probably be less efficient and end up not being able to meet the deadline. Ironic, but that’s how programmers work, at least for me.
Hope this post helps in understanding the programmer’s schedule a bit better, especially the game 🙂 Meanwhile, to my fellow programmers out there, a Blessed Christmas to you all – Adhuc!