I have a confession to make. Last Monday I didn't feel like getting up from bed. In fact I didn't feel like going to work at all. My body wasn't in good shape over the weekend. I had a dry throat, felt hot, irritable, and even had some flu-like symptoms. Not good. Either I was physically sick, or the thought of going to work made me sick. There was only one way to find out which of the two were true.
So I dragged my sorry self out of bed, took a quick shower, and rushed to the office. Monday mornings are usually quiet but there was a bit more stress than usual that day. It got the adrenalin flowing. By the time I got home I had forgotten I was 'sick'. And I even got in a decent workout.
As it turned out there was a flu bug going around at our floor, with seven people down with the flu resting at home. So I'm not sure if I actually had the virus (which explains the flu-like symptoms), or if I was just lazy. But it doesn't matter as the adrenalin rush from the stress on that day probably killed off any bug I might have had. Ah, the powers of psychological conditioning.
For this week, the next week, and the week after that, I'll be fixing bugs. Lots of bugs. We had a fair number of bugs from previous releases that were 'punted' or postponed to a future time. These are the bugs that weren't considered important enough to fix, or bugs that were too difficult given the length of schedule available, or those that required significant redesign of messy modules that nobody wants to touch. Some are performance bugs, where the goal is to improve the running time to get an operation to execute in n seconds or less. It's not glamorous work, you just have to go through each bug and fix them one by one. There's a lot of tracing and reviewing old code, cleaning them up, and making tradeoffs about whether to rewrite or patch poorly designed functions.
I call this stage of the project 'trench warfare'. This is when you're on the frontline resolving issues, dealing with the weaknesses of the product. At this stage the challenge is to keep yourself motivated. You need to crawl through trench after trench. You need to have lists of bugs and goals, telling yourself 'I need to fix bugs A, B and C by Friday to make the schedule'. This keeps you in check, motivating you to keep on fixin', and inspiring you when you see your progress. You have to keep these lists and goals close to you, especially when you see other people working on the 'cool' activities of designing and writing new code, knowing that you're left to clean up the mess. Trust me, from experience I know it pays off in the long run building a reputation as a problem solver and bug fixer, rather than always working on the cool new stuff.
OK now my point (finally). One essential element of being a professional is the concept of playing hurt. One important trait of being a professional developer, or pro athlete and other trades, is developing the consistency and the discipline to work well even on those days when you don't feel like it. After all, Michael Jordan did score 38 points on game five of the '97 NBA finals, the same day he was nursing a 102 degree fever, barely able to walk the night before.