I'm starting to notice some similarities between my daily routine of fixing bugs and working on enhancement cases at work, and any general role playing game. When i don't have anything particular to work on, I'll log into our bug tracking software. This has a list of all bugs and cases that people are and aren't working on. I sort for unassigned cases, and then assign it to myself. This is pretty much like any bulletin board you'll find around anywhere, especially in an old medieval town, usually on the back wall of a tavern. "Search for a Dragon", "Provide safe passage across the Bog of Sorrow", "Fix order processing", "This image doesn't show up in IE".. ya know. Daily Quests.
Once i pick up my quest, it's time to journey into the wilderness. The dark forest which contains complex webs of Java code. I delve deeper into the darkness, running over what happened to the contractor when he was doing the same thing. Finding the problem, developing a strategy/solution, and going through with it. I'm sure i could come up with a clever analogy if i thought about it.
Success. The quest has been complete, back to town to report my success. As, i return to town, I sync up my code base to be completely current with events and things that have happened while i was away. I didn't get any emails about Build Errors, so it appears the town was safe while i was away. I reach the gates of the inner city, and run my JUnit test suite, just to make sure the results of my quest don't infect and harm my fair town.
Crap. It appears by slaying this particular dragon, I have violated this one test that says there are only 7 of these left in the world. Now that there are 6, it fails. Well... i'll just rewrite that test to indicate 6.
Success again. The tests are green, and i'm good to go. I reach the tavern inside the city and lay down my solution on the bar counter, committing these changes to the repository. The commit message indicates which Quest this dead dragon is for.
And I'm set to go. Another job well done, and time to look for a new quest. Occasionally I'll get handed down an official assignment from city officials, like a feature request or refactor.
Abstraction is key to developing any application.. though, sometimes it helps to keep things a little more grounded.