When I first started working as a programmer full time outside of school, in the "real world", I was a bit unsure what to expect. Would I spend all my day slaving at a keyboard? Would I spend it all in endless meetings? Buried under mountains of TPS reports? How does a real software house organize it's labour force on the day-to-day?
Starting my career in some poorly managed companies didn't provide a shining example for me to learn from.
I was literally shocked to see how much of the day co-workers just surfing out of boredom, but I was a little ashamed to ask anyone about their workplaces. Would anyone be honest about such flagrant waste of time? Would they look down on my workplace as a joke? Was the big horrible secret of the "working world" the fact that very little work actually gets done?
It touched protestant work ethic I didn't know I had. So much wasted time and money felt dirty to me.
That said, it wasn't long before I too #$%@ed my day away on websites; and for the same reason co-workers did: there was no serious management structure. Management didn't give anyone serious goals, or give developers the resources needed to meet them. Management provided no structure or oversight to the development process, and morale was fairly low; no one cared. One place I worked some of the developers showed up at 3pm and left before 7pm, four days of the week!
Over the development of my career no one has yet come out and given me a clear definition of what the professional standard for work ethic, but I have managed to develop my own idea of what should be expected of all programmers from a work day (you'll note I do not include managerial job titles):
Organizational Overhead
2 hours per dayThis is the overhead that is not an output itself, but is a natural requirement of any development process, and thus is has to be done every day.
It's often characterized by a series of interruptible tasks that center around communication with other human beings.
- Face to face meetings
- Phone calls
- E-mail and mailing-lists
- Bug triaging and code reviews
- Work-related blogs, websites, and IMs
Development
4 hours per dayThis is the "real" work, and is the measurable result by which your contribution to the group will be judged. If you're not producing here, you are not a developer.
This work is characterize by the necessity to spend long unbroken periods concentrating single-mindedly on the task(s) at hand.
- Researching technologies or libraries
- Devising designs
- Proposing and discussing design details
- Implementing code
- Testing and debugging running code
- Implementing tests and documentation
You'll also note that that accounts for only 6 hours, and the reason is that I essentially do not believe that knowledge workers' productivity, especially developers who are required to expend so much concentration for extended periods of time, scales linearly with time. Your brain needs breaks to open back up. Overwork just leads to burn-out.
The ideal work day for a programmer is some variation on the following:
- 0900-1000: handle time-critical overhead tasks such as emails, bug reports, and meetings
- 1000-1200: concentrate on priority work items
- 1300-1400: regular meetings and emails
- 1400-1600: concentrate on other important work items
- 1300-1700: try concentrate on work while being distracted by meetings and emails
Trying to do too much per day leads to burn-out, which doesn't have to be emotional or dramatic; it can be intellectual, and manifest itself is a subtle lack of creativity that's hard to detect.
Do you agree with my experience-bought conclusion? Do you have your own? Let me know.