In this post we’ll discuss the 5 factors that increase intrinsic motivation and how by gradually losing those while working on a too big project, my motivation eventually grinded to halt so did my productivity and happiness. (TD;DR at the bottom)
Motivation is tricky. For some people it’s mostly hovers a steady level most of days. But, it seems that for more entrepreneurial, driven, type A, win or nothing persons it looks a lot more like an epic roller coaster, it’s swayed up or down a lot more.
I’ve been having a really hard time dealing with a large rewrite project, yes, the thing most experienced programmer recommends not doing, ever. The plan was, take 60% of what was written in the past year by 4-8 engineers, rewrite it from scratch, bring in new features other teammates add the old codebase and finally ship it effectively deprecating the old code.
That endeavour may seem like really too big and impossible to achieve in mere months (by myself alone with a bit of help) but I actually believed it was doable mostly because:
- I had now worked in most parts of the codebase and knew pretty well how it clicked
- I had already tried the refactor part by part approach and failed as they always became too big projects, it’s really difficult to replace an jet’s engine while the plane is flying
- From those previous attempts I had code that could be reused
- I planned on getting some time away from the office to concentrate on getting as much as possible done in the first 2 weeks
Now that we are done and shipping, 3 months later (and I got some help from coworkers down the road), I can see how 1-2 months could have been enough, if I worked at 200% productivity the whole time, like in the first 2 weeks. See, programmers never where good at estimating, we are too biased and there are too much variables involved.
Intrinsic Motivation, compared to extrinsic motivation (earn external rewards / avoid punishments), is a lot more powerful in how motivating it is. We’ll discuss the 5 factors that increase it and how by gradually losing those, my motivation eventually grinded to halt so did my productivity and happiness.
In Making Learning Fun: A Taxonomy of Intrinsic Motivations for Learning Malone and Lepper (1987) identified the following 5 factors as increasing intrinsic motivation:
- Challenge: Goals with a personal meaning, achieving the goal is possible but not certain
- Curiosity: In this case, cognitive curiosity, the opportunity to learn
- Control: Control of yourself, your environment and your task at hand
- Cooperation and Competition: Helping others / Comparing your performance to others
- Recognition: Having your accomplishments recognized by others
Cooperation and Competition
I started the project with a coworker, he was helping me out for the first 2 weeks, in retrospect, things went downhill after that point.
Having somebody to work with is such a game changer compared to working alone as it allows you to split the mental load in two, you are not bearing the stress all alone, you can talk about the project you are on, support each other. That sense that, not only you have help, but also that you have somebody you are competing against productivity wise is a huge motivator. People grossly underestimate the impact of peer pressure!
Once that lovely person I could compete with and share the hurdles with was gone it showed immediately in how much I accomplishing daily.
See, the thing with programming is that not all work is equal in how much of it is visible. New features can be written in a very ugly way (and run slowly) but still work in a very short amount of time. In the first two weeks we got 90% of the pages / functionality rewritten, people where impressed, it was out of this world progress, compressing 6 man-year of work in potentially 2 man-months? Incredible! Except it wasn’t.
Software has this other category of work that most often takes up 80% of the time to produce: test, performance, best practices and edge cases. We skipped on writing tests as we where still shaping up how everything was to be structured and we wanted to show progress quickly. In and of itself this is OK, except I wasn’t ready to deal with the 2 months of that kind of work that came right after.
The lesson here is chunk your work up smaller pieces so that you avoid delaying all the work that gives you less recognition. You’ll then get motivation boosts from visible progress spread evenly on the project’s duration.
Challenge and Curiosity
Let’s associate both as I think they are very much linked when it comes to programming. Why? Because it seems that you can only be curious (learn, improve, read up, understand more) when something challenging comes up. If you are doing something you already know well it’s simply a question of applying knowledge and experience, nothing challenging and also nothing to be curious about.
Generally most projects are skewed in that regard as it’s a good idea to tackle the most difficult part upfront to avoid uncovering surprising unknowns later on during the project. That just means you either need to finds a really challenging project that involves mostly technologies / concepts that are new to you, but erring to far in that direction might just make you get lost and a lot less productive than working with know technologies. All a question of balance.
Control is the last factor I lost, it’s a factor that I think, when working for a good employer, you most often have. In my case, because I started the project and headed it, I was responsible of bringing it to completion, abandoning it or trying to find teammate to finish it for me wasn’t really an option. Problem is: when motivation is rapidly decreasing and you can escape the task at hand, you quickly feel trapped and less and less in control of yourself, your results, your output.
- Highs and lows are normal
- Listen to you elders (or be ready to learn the hard way)
- You can keep yourself really productive if you watch out for those 5 intrinsic motivation factors
- It’s still all a question of balance, work is not always 100% rainbow and unicorns, just try to keep an equal amounts of that kind of work spread out, don’t do it all upfront, you’ll have a hard time with what comes next
TL;DR 1. Work with friends, 2. Chunk work in small pieces, 3. Always be learning, Actually do 1, 2 and 3 in balanced amounts.
Malone, T. W. & Lepper, M. R. (1987). Making learning fun: A taxonomy of intrinsic motivations for learning. In R. E. Snow & M. J. Farr (Eds.), Aptitude, learning, and instruction: III. Conative and affective process analysis. Hillsdale, NJ: Erlbaum.