I just got off the phone from a very frustrating conference call.  Today’s call brought to light something that I want to address.  It’s a misconception that many non-developers have about software developers.  I know this misconception exists because of the way I’ve heard people refer to our profession; because of the way non-developers in our industry often seem to treat developers. 

I think there’s a misconception that our days are filled with free time, that we relax and chill, and that our jobs are so easy that they don’t even qualify as real jobs when compared to most other professions.  I mean, we sit in a chair and use a computer, how hard is that??  Developers lead easy lives, right?

The truth is, most people have no idea what our lives are like.

Background

Before I begin, let me clarify my situation.  I’m married with a 7 month old baby.  I have a masters degree in computer science and am planning to begin work on a PhD next fall.  I work for a (very) small company that seems to be in perpetual startup mode, meaning we have few resources and just can’t seem to break in to the big money needed to grow a mature company.  Still, I genuinely enjoy my work.  I’ve become very interested in the business domain (information retrieval/knowledge management), and I like working here.  There are a lot of perks to working here, including being able to live in a very small town while getting paid decent money to write code. 

Up and out of bed…

Here’s how my typical day goes.  I wake up early, around 5:30. As I get out of bed, my mind starts swimming with partial solutions to whatever I was working on the day before.  As if by magic, my brain somehow manages to come up with useful solutions (sometimes) while I’m sleeping.  Once I’ve woken up a bit, I help the wife get the baby up and fed while we both get ready for work.  If all goes well, I’m out the door and at the office by 7:00.  I spend the first little bit catching up on E-mail, planning my work for the day, and reviewing what I did the previous day so that I’m ready for the 8:00 scrum.  I scan a few development blogs for useful articles, too, and tag things to read later if time ever allows.

Morning Push

From scrum time until lunch time, I’m doing development.  That may involve testing, it may involve design, and it more often than not involves coding.  This is not easy.  If developing good software was easy, everyone would write perfect code, but it’s not.  It’s very hard.  It’s mentally taxing.  Unless I’m interrupted for a meeting, this is my entire morning: working as quickly as I can to create an efficient, maintainable solution to whatever story (AKA a feature for those not in the development business) I’m working on so that I can move on the next story.  There is no slack time here.  I use a Pomodoro timer to help keep me on task, trying to address IMs, E-mails, and other distractions in my 5 minute breaks.  I occasionally get distracted, some days more so than others, but I do my best to stay focused on the task at hand.

Lunch != break time

At 11:00, I take a “break” to eat lunch.  Usually this involves warming up the meal I cooked over the weekend, then eating it at my desk.  I’ve started taking the time to read one research paper (or chapter from a relevant e-book) during this period, too.  The papers and books I choose are all things related to my job.  It’s not like I’m sitting around reading sci-fi books, I’m spending my lunch time trying to learn something that’s going to make me more valuable to the company.  After I’ve finished reading today’s paper/chapter, I return to whatever task I was working on before lunch (note that I’m usually still physically consuming my meal at this point; it’s usually around 11:30 now). 

Sometimes after lunch, the team takes a 30 minute break to do something recreational together.  Other days, we may all go out for lunch.  Occasionally, we will all eat lunch together while we watch a webinar.  Again, we choose webinars that are going to help us contribute more value to the company.

Afternoon Push

After lunch/break, it’s right back to development.  This mirrors my morning: I use a Pomodoro timer, try to stay focused, and drive on through until the end of the day.  Again, there may be meetings or other interruptions, but most of this block of time is spent writing code.  I sometimes take a break to write a blog post, but my posts are (almost) always related to work, and often are used as a way to get feedback on things we’re doing internally.  We have a fairly small team, so I use my blog to try to gather feedback from a larger audience (see: liteGrid). 

“Life” outside of work

“The end of the day” comes at different times.  A couple of nights a week, I train kick-boxing and jiu-jitsu, and on those days I’m out of the office promptly at 5:00.  The days where I don’t have something to force me out of the office, I often find myself texting my wife that I’m running late when the clock says 6:30.   When I return home, I spend as much time as I can with the wife and baby.  The baby is usually out by 9:00, the wife is usually in bed by 10:30 or 11:00.  I usually take the next hour or so to (you guessed it) do development work.  Depending on how behind we are, I may work on the same story I was working on when I left the office.  If we’re not “OMFGWTFBBQ” levels of behind schedule, I may work on something that’s directly related to an active story, but I usually still work on something that’s going to benefit my employer.  Lately I’ve been working on Esenterate, which I hope will be used in the backend of a future product.  I also work on liteGrid when time allows (again, used by my employer). 

I finally decide to go to bed somewhere around 12:00 or 1:00.  Sometimes its earlier, depending on how tired I am, but I’d say 12:00 is about the norm.  If I’m not too sleepy yet, I’ll open up the book on my nightstand (always a development book; always something that’s going to make me a more valuable asset) and read a couple of pages.  Then the alarm goes off, and it’s 5:30.  I guess I slept somewhere in there.  It’s time to wake the baby up. 

The end… ?

As I typed this, I just realized how pathetic my life probably sounds. :)  It’s really not that bad, and my intent is not to paint a bad picture of the work environment here (it’s not great, but not horrible) or my life. Sure, it’s not easy, but I enjoy my work, I still spend time with my family (and occasionally my friends), and I’m content.  The moral of this post is simply this: software development is not easy.

In the past, I’ve worked quite a few jobs outside of software development.  My first job was in fast food.  From there, I took a job as a farm hand.  As an undergrad, I worked in the campus print shop (running old-school machines, not doing design or anything that involved a computer) and also at a retail department store.  It wasn’t until I was a junior that I started actually getting paid to do development work.  I’ve also helped remodel a house (though I sadly wasn’t paid for it).  In my opinion, without a doubt software development is far more taxing than any other job I’ve ever had.  A day of hard work on the farm can be offset by a hot shower and a hot meal, but I’ve yet to find something that can so easily replenish my mind at the end of a hard day of coding (though Red Bull does provide temporary relief).  With any other job I’ve had, I could mentally “check out”, but I can never, ever do that while developing. 

What brought this on…

Sadly today’s conference call included us (the developers) basically being told that our estimate for building a product for a completely new platform that none of us have experience with was too high and vague, and that the estimate should be lower because we should have already used our free time (ie: not paid for) to learn the platform already.  I found this to be extremely insulting (on a lot of levels) and completely inappropriate.  Things like this have happened a few times since I’ve been here, and I ran into it several times while doing consulting work.  I’ve also heard stories from others in the industry who have encountered similar attitudes.  I hope that this post will serve as a reminder that a) developing software is hard, and b) software development is often a thankless career path.  If you encounter someone who says “oh man, you developer guys have it sooo easy in your air conditioned offices”, remind them that many of us (me) work in offices with no windows, and send them a link to this post. 🙂