How I Learned to Stop Worrying and Love a Career Change

One of the most pointless things a blogger can do is make a post saying “wow, it’s been a while, but I will update soon, promise!”. Still, it has been a while and a lot has happened in that time.

I hung up my community moderator hat and joined Stack Exchange as a community manager. I originally started part-time and kept my daytime software gig, but I went full-time at the beginning of May and it’s been an interesting experience. I like to describe the job as “equal parts social experiments and tech support”.

Are you happy?

My team and co-workers at my last workplace were great, but the job and I disagreed on what turned out to be a few very fundamental levels:

  • I love coding. I did primarily testing/integration work. Totally by choice, but turns out that’s not my thing.
  • I love being able to learn and contribute in various areas. The company was set up to strictly separate responsibilities.
  • I need to know that I’m making some sort of a difference and the things I do are being used out there. This was actually pretty well covered. The software we built does some really awesome stuff. But it still doesn’t compare with working on something like Stack Exchange where you get feedback (good and bad) daily and directly.

I look at my time in my last position as a great learning experience. It taught me a lot about what makes me tick. The job ultimately wasn’t doing it for me, though, so I quit.

The first question I always get when I tell someone this is “don’t you miss programming?”. The answer is “I don’t because I still do it!”. I don’t think a person is defined by their job. I may not be working as one, but I’m certainly still a developer. I’m still really into it. If anything, my interest and passion have been renewed! I have a backlog of projects that I’m finally getting around to and it’s been great. So far, I’ve got a few things in progress:

  1. There’s a little app I’m writing to extract SMS and iMessage records from an iPhone backup. Turns out all that is stored in a Sqlite database. The schema is a bit weird, but other than that, it’s pretty easy. Still got a lot of polishing and refactoring to do (and I don’t promise it won’t eat your computer or your backups somehow), but it works!
  2. I’ve been learning Django and catching up on my CSS, helping extend the website for a local Python group.
  3. I also finally started going through Seven Languages in Seven Weeks, among catching up on other reading.

Will I get back to programming for a living? Maybe. Probably. I’d like to, but for now I’m content to just go with the flow. Stack Exchange is basically my dream employer, and I’m using this time to beef up my skills and do a few things I’ve been meaning to do for a very long time, all while doing something I also enjoy during the day. It’s a fantastic spot to be in and my only plan right now is to see where this takes me.

Creating a New Application: First Lessons Learned

It may or may not come as a surprise, but writing software is hard. Having spent the last 3 years doing it for a living, I’m finally making time to develop a side project. I don’t have a proper name for it yet, but I don’t think I have to worry about that for quite a while.

I’m struck by how easy it is for me to write code at my job, where all products are in well-known locations and I’m very familiar with the code base. Creating an application from scratch is turning out to be a whole different animal.

I’ve been going back and forth on design decisions, agonizing over which features to start with and how to go about implementing it all together. And the main thing I learned is that writing code right away really is the worst thing to do. I made the mistake of ignoring that rule and paid for it by re-writing the same feature 4 or 5 times.

So below is my list of recently learned through experience things to know about writing a new application.

Lesson 1: Gather All Your Features in One Place

No, “it’s in my head” doesn’t count. Have a piece of paper or a text document that lists every feature you can think of. Then walk away from that list. Come back to it in a bit and read it over again — remove features that aren’t essential at first. Trim it down to the bare minimum that gives you a functional application. It may take a few iterations to get down to a short list of prime features.

Once that list is ready, prioritize core features over fancy “wouldn’t it be cool if…?” ones. And last but not least, think over every feature — what is needed to implement it? Will you need to pull in some third-party frameworks? Are there any particular design considerations or concerns?

Lesson 2: Figure Out All Workflows

For each feature on your short list, write out a detailed workflow. For example, in my application, the user can create new “To Do” items. So I write out that workflow:
1. Click File->New…
2. A dialog comes up where the user sets task parameters and notes.
3a. User clicks Cancel and the dialog is closed, discarding the information.
3b. User clicks OK and a new task is created.

I’d even sketch out the UI for each step, as needed. It helps.

Lesson 3: Write Some Tests!

It may be hard to wrap your head around how it will all fit together. The easiest way to get some progress is to write some unit tests. This will help you figure out what your classes might look like and help you arrive at a more easily usable interface.

Lesson 4: Don’t Settle on First Version of Anything

For each of the above lessons, I’ve found it helps to walk away for a bit and think things over. When you come back, you can look at things with fresh eyes and sometimes see things you missed the first time.

Lesson 5: Do One Thing At a Time

I find that I get distracted a lot while I code. Not by outside things like email or Twitter, but by tangential thoughts or ideas about what I’m doing. I keep thinking “oh, it’ll just take 30 seconds to fix up this one thing over here…” and before I know it, it’s been half an hour and I completely forgot what I was working on in the first place.

It is important to stay on track and on target. Make notes of things you think of along the way and schedule them in later.

Conclusion

It all boils down to staying focused and organized. Charging in keyboard blazing and starting to type out code will only slow you down in the end. It’s best to slow down, take stock of where you are and where you need to be, and form a plan to get there. Then work the plan and enjoy the feeling of productivity and motivation as you check things off and see your work produce tangible results.

Happy New Decade

I’ve seen some arguments going on around whether or not 2010 is the start of a new decade or the end of the “old” one. Among them was the best argument I’ve ever seen for zero-based counting: if 2010 is ending a decade, then by the same logic, 1980 is a part of the 70s and that’s just wrong. I really don’t think I can (or want to) argue with that, so I’m choosing to think of today as not only the beginning of a new year but also of a new decade.

Ten years is a bit too far in advance for me to even begin to contemplate planning. One year, however, is still doable. So, what do I think is on the docket for me?

  • Guitar Lessons — I’m going to continue taking guitar lessons and step up my actual practice time. I’m ashamed to admit that I have very little to show for the years I’ve been “playing” the instrument. That will change. When I do practice, I notice an almost immediate improvement, which tells me that I do have at least some talent for it. All that I need is practice and proficiency will come.
  • Side Projects — I will spend more time developing my own projects. I’m going to start with programming, of course, since that’s what I know best, but I’m sure others will come in time.
  • This Blog — I learned something obvious in 2009: without doing anything noteworthy, I don’t have anything noteworthy to write about. I will be expanding this blog to cover a few more topics, instead of trying to just blog about software development. At least until I do enough of the latter to be able to fill at least some regular posting schedule.
  • Debt Reduction/Conscious Living — I have some debt incurred during university, some for legitimate reasons, and some just because I didn’t know any better. It is well past time to deal with it all. My goal is to put thought behind everything I do. Even if I choose to spend my time on things that others might consider unproductive, I want it to be because I thought about it and consciously made the choice. It is time to reevaluate, and in some cases evaluate for the first time, what I spend my time on and why I do the things I do.
  • Theatre — I will continue my involvement with the Kitchener-Waterloo Little Theatre. I find it deeply fulfilling, and it’s good to have hobbies that get you out of the house once in a while.

Of course, it remains to be seen how much of the above will actually happen. I think the odds are in my favour. It will be interesting to look back at the end of next year and see how it all went.