When it comes to software development, I’d describe myself as streaky.
I tend to become obsessed with what I am working on so much that over a span of several months I am putting out release after release after release. Once I get off the adrenaline high of putting out all those releases, I tend to step back and spend the next few months toiling around on the Internet or exploring new ideas and interests. That is the time you’ll usually find me tinkering with other platforms like Android or Windows Phone. I am a genuinely curious person, so being able to allot time to explore things of interest outside my main job as an Apple platform developer is good.
Of course, it’d be great if I could do that on a more routine schedule rather than bunched up. I have tried to tie myself to a more regular release schedule and get something out every month, but there’s something wired in my brain that just doesn’t allow it. I am sure there is some sort of productivity porn I could read up on Lifehacker or any variety of other sites that tout the benefits of distraction free environments, but that stuff doesn’t click with me. I just accept that this is how I work and go with it.
December 3, 2010 was a normal day. Like any work day, I spent my time staring into the screen of my iMac typing away and complaining about build errors in Xcode. That evening I attempted to cook a shrimp etouffee that I would describe as a bit thicker than I had hoped.
After dinner things changed.
I won’t go into details1, but my wife and I ended up in the hospital confused and looking for answers. We didn’t get any that night, but did get a trip to a doctor a few weeks later and even more questions.
The next three months were filled with semi-regular episodes and monthly follow-up trips to doctors to try and find a solution and get things back to normal. None of this was life threatening, but it was certainly stressful, sudden and without warning.
Did I mention I don’t handle stress well? At all.
When I am under a tremendous amount of stress, my brain races. I’m constantly analyzing fifteen different scenarios about how things will turn out or replaying things in my head wondering how I could fix them. None of it is productive, and it just makes my heart race as I contemplate when the next shoe is going to drop.
I spent December to May on edge and in that brain racing state. I wanted to work, but couldn’t seem to get my head in a place where I could regularly. Sitting down at the computer to try and get work done was futile at best, but damaging at worst. Most days I’d open Xcode and just stare at the screen while my brain was playing through every possible life scenario that didn’t involve
if statements and retain counts.
Every few weeks, I’d start to think that life had started to cool down and I’d be able to get back to my routine only to be upended once more with health issues. Back to square one. More brain racing.
Those times that I actually was able to write code seemed productive at the time though in reality I’m not sure what I was thinking. What better time is there than when under an enormous amount of mental stress to completely gut your app and try to write a new sync engine from scratch? Even better, let’s start fixing all those things that have bugged me in the code. It seems like each session would take me down a different fork that at the time made sense. Ok, now ignore all those half implemented changes for several weeks as health issues flare up and you can’t stare at the screen without feeling like you’re going insane.
At one point in this crazy mental mess I actually was close to shipping a release only to decide that I may as well try and plug the half implemented sync engine into it because it would fix a bug that had bothered me for so long. So much for shipping that release.
I wasn’t writing code to improve Elements. I was cranking because I thought I had to be writing code and shipping software. Writing software is what I do. It’s what pays the bills. Any day I am not writing code is a day I’m not bringing in money. Looking back, I should have uninstalled Xcode until I got my head screwed back on straight.
So I stopped trying to crank through. Instead I watched a lot of bad TV shows. I watched movies. I exercised way more than the daily recommended amount. I even started writing on this site again regularly. I did anything I could to try and get myself in a state where I actually wanted to work again and, more importantly, could.
It’s been 100 days since the last health scare, and things are starting to return to a state of normalcy. We’re not entirely there, but my brain is at least functional enough that I can get back into my daily routine before all this real life stuff got in the way.
I started writing code again about four weeks ago and the first time I opened Xcode I realized what a mess I had gotten myself into. The Elements code base was in no way shippable with so much broken and half implemented. I spent the first several days manually pulling out the good bug fixes and small features that were littered amongst the wreckage my brain and fingers had implemented along the way. Then began the manual process of applying those changes to a clean room version of the last shipped version of the app.
Elements 1.6, which I released this morning, is the fruits of that labor and the first step in my comeback. Barring any more setbacks health wise, it’s my hope that regular updates to my products will resume and we can chalk up the first half of 2011 as a teachable moment about not trying to push through the mental walls my mind puts up.
Last week was the most productive week of software development I have had in almost a year. You had to pry me away from the keyboard at night because my fingers were dancing on the keyboard working on so many interesting and awesome things that I will hopefully be able to show you in the coming weeks and months.
Why write this? Partially because I felt like I owed an explanation as to why updates disappeared to the thousands of people who have supported me over the years by buying my products. It’s also my hope that someone else out there who ends up in a similar situation, will happen upon this article and not make the same mistakes I did.
If you have follow me on Twitter you most likely know the whole story. I just don’t feel like rehashing it here. ↩