Time Slides - The Problem With Being A Completionist

My wife and I were fortunate enough to be able to purchase season-long passes for us and our kids to our local water park. Since we live in a desert and our summer lasts half the year, this park is a perfect place for all of us to go and cool off for a little while. The kids love it, we get out of the house (which can be hard to do when it's 110F/43C outside), and we all get some quality time away from TV and video games, the trade off being the occasional sunburn. It's been a win-win for everyone involved.

Tornado water slide at Darien Lake by Zotdragon, used under license. The same slide exists at our local water park.

On our first trip of the season, I realized that there were a fair number of slides (more than half) I've never been on. Well, I can fix that, I thought, and quickly made up my mind that I would be going on every single one of them, including different slides that were part of the same ride. It would be easy enough, I reasoned; there's only about fifty slides total in the park, I can go on all of them. That way, when I was done, I could say I "completed" the water park. This would be fun!

And so my happy quest began. I first got in line for the Tornado slide pictured above, then the race slides (four times!), then the water coaster. They were all a blast, and I started to feel like this would be worthwhile. I made it my purpose, my reason for going to the park, to complete this goal.

Lines, though, lines were my enemy. Several of the lines for the more popular rides were multiple-hours long, and I stood in two of them before the day was over. Just as I felt like I was making progress toward my imaginary goal, the sun began to set, the kids were exhausted, and we had to head home.

No big deal, I told myself without entirely believing it, I'll just pick up the quest the next time we go to the park. Being the completionist that I am, this is exactly what I started doing on our next trip. When we arrived I immediately jetted off with my sons in tow to the mammoth falls, then the second coaster track, then the racers again to grab the purple and yellow tubes I'd missed the first time round. It was a blast, and the kids were having a lot of fun, but once again the long lines were my undoing, and by the time we had to leave I had only completed about a third of the total rides in the park.

Dammit, I thought, another setback? I'm never gonna catch up at this rate. I was annoyed, and surprised at myself because of it. This was supposed to be fun, wasn't it? So why was I so frustrated?

Two weeks later was the third trip, and now I had to get in line for the tube sliders, then the river rapids. I ended up standing in line for the latter ride for two hours, despite the fact that it was one of the few rides that I'd been on before. At some point, without my notice or consent, this happy quest transformed into a hungry need, a void into which I was pouring my time. I had to ride all the rides, needed to finish this self-imposed mission. The completionist mindset that I often find myself troubled by had totally taken over, and now what was once a silly, mindless little game had mutated to become an unnecessary necessity.

This isn't fun anymore. This little thought, this harbinger of the quest's doom, occurred to me while standing in line for the dark tube ride. This was supposed to be fun, wasn't it? So why wasn't I having any fun? Why was I doing this? There was no goal to this "quest" other than "bragging rights", and even then, who would I brag to? What was the bloody point? They're just slides!

Cyclone WWW Interaction by Saberwyn, used under license

After the third trip I gave up the quest. It wasn't fun, wasn't fulfilling, and once I let go of the stupid desire to "complete" the park I felt relieved. I was unburdened from my own flights of fancy, and now I could just go out and have fun with my family. The whole idea started out as something that sounded fun, a goal to accomplish, but it just ended up stressing me out for no good reason.

All of this nicely illustrates how I feel about constantly trying to keep up with current trends in the software industry. I sometimes feel like I have to ride every ride, see every place, talk to everyone, just to keep up with what everyone else in my field seems to be doing. I feel like I'm being left behind, and so I have to try to do everything. Problem is, while "everything" at a water park may be fifty slides, "everything" in software development is a limitless pool of information and innovation and knowledge and it is simply impossible to keep up with it all.

The solution for my self-imposed stress was remarkably simple. I stopped trying to keep up with everything. There's just too much that I could choose to learn.

Instead, I'm forcing myself to pick which things I really need or want to know. Sometimes I choose to learn something because it will help me get better at my job, sometimes because it just sounds fun. Sometimes I learn something just in the nick of time, because it will help me solve a bug I'm tracking. Sometimes I choose to learn nothing at all and go outside. Anything I choose to learn or improve on will occupy some of my precious time, time which I'll never get back, and so it had better be worth the trade. To be frank, I'm not very good at this yet (as my batch of half-completed projects will attest to) but I'm getting better. Slowly, deliberately, I'm figuring out how to make the most of my time and still keep up.

The point is that I am now back in control of my time. I choose what line to get in, which ride I really want (or need) to go on. I choose what I want to learn (or choose how to learn it if it is something I must do). I am in the driver's seat for my own professional life, and now I just have to find the wherewithal to stay there.

For me, at least, what I choose to spend time learning needs to have a purpose, and that purpose should be more than "because I need to keep up." I don't need to keep up with every little change. I don't need to get in every line, to ride every ride in the park. I just need to ride the ones that make me a better developer, the ones that I decide are worth the time invested, the ones that I think look like fun. Whether that's many of them or just a few of them doesn't matter. I choose how to spend my time, and I want to spend it wisely. After all, the time I spend standing in line or learning a new technology is time I'm never going to get back. I want to make the trade worth it.

In the meantime, I'm gonna go get in line for those racer tubes. What will you get in line for?

Be Like Us Or Else - Desperation, Failure, and New Job Regret

I've only held three full-time software development jobs since graduating from college, including my current one. The second one was supposed to be my big breakthrough, my time to shine and become part of a well-oiled team of kickass programmers.

That was not what happened.

What actually happened was six months of frustration that ended with me sobbing in my car. This is a story about ignoring red flags, feeling like an outsider, and how while desperate unhappiness drove me to seek a better employer, refusing to sacrifice my personal time (and my refusal to see the warning signs) got me fired from it.

Set of red flags waving in the wind "Red Flags" by Rutger van Waveren, used under license

Missing the Warning Signs

Two years into my first job out of college I became immensely unsatisfied with my current role. I was the only programmer on a group of non-technical people, and not having a team to work with was really getting to me. I just wasn't happy in my work. I felt that I needed to find another job before my sanity suffered, and so I started sending out applications.

The first company that contacted me, a small four-person team, set up a phone interview which went well enough. The CEO of this company told me that they were a Microsoft shop, and that they were looking for a young developer that could slot right into their team and "hit the ground running."

He asked me why I wanted to switch to a different employer, and I told him that I was sick of working by myself and wanted to work in a team environment. He stressed that his shop was very much a team that worked together on all their projects.

I asked him what the work hours were like, and he told me they were a strict 40 hours a week, with occasional Saturdays for bug fixes and emergency changes. He said that when those emergencies came up, I'd be expected to pull my weight like the rest of the team.

I asked about salary, and he told me that he was willing to pay me $X. I told him that I was already making that at my current job, but he said I should be glad to take $X because I would be "doing what I loved to do." I countered at $Z. We finally settled on $Y, somewhere between $X and $Z, and he emailed me the offer sheet for me to sign.

Did you catch all the red flags? I didn't. I was so blinded by my dissatisfaction at my current job that this new opportunity seemed like a great improvement: I got to work in a team, I got a raise, and I got an office. It seemed like a dream come true.

My wife was not convinced. From her perspective, I'd gone from a cushy job in a huge multi-national to a position where I was much less secure in my employment. We'd just bought a house and had a 1.5-year-old son, and I was going to risk their financial safety simply because I was unhappy? Not only that, but I was going to take the first gig offered and not even look for others? How selfish I was.

In hindsight she was absolutely right, but at the time I didn't care; I was desperate to get out of my current job. The same day I concluded the phone interview and got the offer sheet, I submitted my two weeks' notice.

That's Just Part of the Job

The first day at the new office went really well. The CEO was very nice, and my teammates were quite knowledgeable about their work. The building had a kitchen, fully stocked with coffee, soda, water, and snacks, and we were free to take whatever we needed at any time. We also frequently went out to team lunches, which were quite wonderful; it was something I'd never gotten to do previously.

The first few days were pretty nice. After that, though, things started going downhill.

The boss began calling me into the office on Saturdays. Usually he would tell me this on Friday afternoon, which immediately cancelled any plans I had made for the weekend.

The first few times this happened I just went to the office and did my work, but as it started happening more regularly I started pushing back, requesting more notice so that I wouldn't have to keep cancelling my plans. He never did give me more notice, and refused to offer compensation days during the week. I was OK with doing occasional Saturdays if there really was an emergency, but I was needing to come to the office every weekend and was receiving no compensation for it. He told me it was "just part of the job", and that didn't sit well with me.

About three months after I started working in this new position, I realized that I was always the first one to leave the office. I had a wife and small child at home, and didn't want to miss time with them. But everyone else, even the people that had families, were working 10 or 12 hour days, 6 days a week, every week. I simply refused to sacrifice my personal time for the benefit of the company, and so I was always the first one out the door.

They never said it out loud, but I got the distinct feeling that I wasn't really part of the team because I didn't stay late. My noticing this triggered another horrible realization: I was yet again an outsider, trapped back in the hell I had tried to escape from. I was on a team, but not a part of it.

For the time being, I continued to work there for two reasons: because I was the sole breadwinner for my household, and because it had been my idea in the first place to change jobs. I had put myself and my family through some big changes, and now I felt that I had to lie in the bed I had made.

Silence was the Right Choice

One day, I was summoned to the building's conference room where the CEO and two other employees were waiting. I was asked to close the door behind me, and was promptly told by the CEO that I was being let go, effective immediately.

I don't think I said a word for a good five minutes; my brain was short circuiting, unprepared to deal with what had just happened. I meekly asked why, and they said that I wasn't a good fit for the team, that I didn't mesh well, and that I wasn't ready and willing to share the workload. They said that I would still receive my last paycheck, but that I needed to gather my things and leave.

I asked if I could have done anything differently, and they said yes. They said that if I was able to make some changes, they would keep me on. They'd thrown a lifeline to me, and now willed me to grab it and hold on. But the lifeline was threaded with thorns, and it was painful to grab, so I refused it and didn't say anything.

I mentally criticized myself for staying silent. You idiot! Say something! You can still keep this job that you gambled your family's safety on! Just say you'll change, that you'll stay late, work weekends, whatever they want. Go on. Say it!

I couldn't say it. The fact was that I was not willing to put in the extra hours, not willing to come in on weekends, not willing to sacrifice my personal time for the benefit of this company. They saw it as not wanting to be a team player; I saw it as attempting to retain my sanity. All of this "be like us, or else" bull was just not something I was going to do. In the back of my mind, I knew that my silence was the right choice.

But in the moment, I felt like a failure, more so than I ever have before or since. This huge risk I'd taken was now backfiring, and my family would be the ones paying the price.

I left the conference room, gathered my stuff, and headed out the back door to the parking lot. I had worked a grand total of six months in this new position.

I shuffled to my car, tossed my things into the back seat, and tearfully called my wife to tell her I'd been fired. It was one of the most humbling conversations I've ever had. I had to admit to the person I loved most that I'd been a fool, that I'd been blinded by my desperation, and that now the entire family had to scramble to make up for my mistake. My illusion of invincibility was now totally, irrevocably shattered, replaced by guilt and regret.

I was very lucky that I was only out of work for two weeks before I got hired at my current place of employment. It was only after working at my current job for a year that I realized that being fired from that company was the best thing that could have happened to me in that situation. I was glad to be gone from there, and wondered why the hell I'd ever thought working there was a good idea.

What about you, dear readers? Did desperation cause you to take a job you ended up regretting? Did your team need you to work extra regularly, did you do it, and how did that work out? Let me know in the comments!

Do Something Else

A human being should be able to change a diaper, plan an invasion, butcher a hog, conn a ship, design a building, write a sonnet, balance accounts, build a wall, set a bone, comfort the dying, take orders, give orders, cooperate, act alone, solve equations, analyze a new problem, pitch manure, program a computer, cook a tasty meal, fight efficiently, die gallantly. Specialization is for insects.

- Robert Heinlein, Time Enough For Love (emphasis mine)

Programming is not my life.

There, I said it. I love programming, development, software, anything in that space, but I'm not seeking out additional time to program. It's how I pay the bills, and I'm always looking to improve, but it isn't something I need to do after a day at work.

You could say that I'm a 9-5 programmer. I go to the office, I do my work (which I very much enjoy), I kick ass, and then I go home to be with my family (and occasionally I blog). I don't live to work, I work to live.

My conversations with Luis seem to have really gotten to me, because I started thinking more and more about what kinds of boundaries I've had to set with myself to keep my ravenous brain in check.

See, I used to be the all-code-all-the-time guy. Throughout my college days and my first real job, I basically didn't stop programming. Every free moment was filled with variables and methods and classes. My brain compelled me to figure out the next problem, solve for the next requirement, implement the latest technique, and I couldn't (or didn't know how to) turn it off. My mind was a gaping maw, eager to process all the information it could possibly lay its hands on.

It was exhausting. I couldn't keep up with my desire to consume knowledge, and it had, without my approval or notice, risen up and taken over all aspects of my life. Code in the morning, code at lunch, code at night. I was mentally tired from running this rat race, and as I began to approach the finish line I could see burnout, clapping and cheering, eagar for me to complete the race so it could claim its next victim.

My lovely wife, having noticed that I wasn't doing anything else, pulled me off the track and suggested (rather forcefully) that we should do something together. So she rented a few TV shows (we had just gotten married and couldn't afford much in the way of entertainment) and over a few days we watched them together, deliberately avoiding distractions like phones or computers. At the end of those few days, I realized that this was what I had been missing, what I could use to avoid the burnout that was waiting for me to submit to it: I needed to do something else.

So I started going outside. On a whim, my wife and I went to Flagstaff, a two-hour drive from Phoenix and over a mile higher in elevation, just to walk our dog in the forest and breathe some fresh air. We got annual memberships to our local zoo because we both love animals; we still have these memberships and go at least every other month. We started putting money aside specifically for entertainment; it became our "go do something else" fund. We started doing things other than our jobs.

For the first few weeks I had to force myself to do these things. My brain doesn't simply turn off, and I had to forcibly redirect it to something besides figuring out the latest Javascript framework. The more I did that, though, the easier it got.

My wife and I, on reflection much later, realized that these "other" things we what kept us sane. When the baby was crying at 2:30 in the morning for no reason we could discern, when the dogs decided the living room would work as a toilet, when my job needed me to come in for several Saturdays in a row and I had to leave her to fend for herself with a toddler and an infant for another day in an already long week, all of these things were what kept us focused and happy.

Those other things prevented burnout from claiming me.

Programming is simply a part of my life; it is not the sole focus of my life. It's enjoyable, I'm good at it (I think), and I want to get better at it, but it is just one facet of my multifaceted existence. I program so I can live.

Living, to me, is more than just coding. You know what I live for? Camping. Reading. Chatting with my wife. Playing with my kids. Driving. Taking pictures. Seeing my family. Visiting museums. Hiking. Playing board and card games. Listening to music. Writing. Cooking (although I'm not very good at it). Seeing a play. Going to the movies. All of these things I love to do, and none of them directly involve me writing code.

If you feel like burnout is coming for you, go do something else! Do anything that is not your job. Go fix that home project you've been putting off, go jogging around the block, or even just read a book, anything other than what your job is. We all need many different interests to keep our lives interesting, and if programming doesn't fill that void, then do something else.

Personal Time != Company Time

A junior programmer (let's call him Luis) and I were working to find a particularly stubborn Heisenbug (a bug that seems to disappear when you attempt to study it) this last week, and it was kicking our collective butts.

This thing was just impossible to pin down: it seemed to only happen under very rare conditions, and no one on the programming or QA teams had been able to replicate those conditions exactly. We knew it was happening, though, because we kept getting similar complaints from our users. Because of these complaints, the bug was high enough priority that we needed to find it and kill it, but not high enough that it was our only task. We'd been working on it for a couple days, and we weren't any closer. Long story short: this bug was proving hard to squish.

Luis and I were doing a quick wrap-up on Friday afternoon so we could know where to pick up this bug hunt on Monday. Luis casually told me he'd take a look over the weekend to see if he could find out anything else. I immediately asked him not to do that.

He seemed puzzled, countering that it really wouldn't be too much trouble. I replied that he shouldn't worry about it; while I can't tell him what to do since I'm not his boss, I did express to him that I wouldn't be spending my personal time (e.g. weekends) working on company projects. That time is for me, not for the company.

I'm lucky in that this seems to be part of the culture of my workplace. Upper management expects you to spend 40 hours a week to kicking ass on company projects, and then go home and not do company things on the weekends.

What surprised me the most was that Luis wasn't told to work over the weekend, he volunteered. He wanted to do it. I asked him why he wanted to work on this over the weekend, and he told me that he just wanted an answer. We'd spent a lot of time and energy trying to track this down, and we hadn't gotten very far. Luis really wanted to just have the answer so we could justify all our effort.

What Luis didn't realize was that he was falling into the sunk cost fallacy, a term from economics that describes why you went to that baseball game you already bought tickets for even though you were sick and should have stayed home in bed. People are averse to loss, and admitting they've wasted time, money, or effort is one of the things people will do their damndest to avoid. Luis didn't want to admit having "wasted" time and effort tracking down this bug with nothing to show for it, and so he wanted to redouble efforts and spend more time tracking down something that had already consumed a lot of it.

Thing is, we didn't "waste" time at all. In the hours we spent searching for the bug, we eliminated quite a few alternative theories as to why it was occurring, and had narrowed down the code that was causing the bug to one of three different places in the (very large) codebase. We still didn't know precisely what was causing it, but we knew what wasn't, and that was something.

I told Luis that, if he really wanted to and had nothing better to do, he could try to continue the bug hunt over the weekend, but that I would advise against it. Too much time spent looking at code and being frustrated leads to burnout. Besides, do you really want to spend your personal time on something that benefits the company and not you? It wasn't like we'd get anything more than a "good job, guys" when we finally found the bug (not that we should; this is our job after all).

I don't know if Luis actually did any hunting over the weekend; I'll find out Monday. But I hope he didn't. We developers spend a lot of time poring over code in our regular jobs, and IMHO to do that in our free time of our own free will for something that doesn't directly benefit us or our family is madness.

What do you think, readers? Am I being overly cautious, or stepping over a line by making such suggestions? How do you deal with sunk costs and needing to know the answer? Let me know in the comments!