Halfway through 2012, I started my first full time software development gig. Spending day in and day out extending and maintaining the same codebase has taught me a number of things that freelance projects never did, and I’d like to share a few lessons I’ve learned. These are all things I knew intellectually, but ultimately had to find out for myself through frustration to incorporate into my every day practice.
When tasked with a new feature that is core to an application, my first impulse is to talk and think through the functionality and edge cases. What does it need to do? What’s the most reasonable, non-arcane, and maintainable architecture I can come up with? By this point, I’m eager to sit down and write some code. I invariably regret it when I do. The code that results will fit the feature spec in that it does what it’s supposed to, but can be an unpleasant experience to leverage and maintain.