January 2, 2009 § 3 Comments
There have been a number of times when I’ve sat down to code away at a software problem, and then after a while discovered that I’m getting quite frustrated in some way. If I’m honest I wondered if this was simply me being me, hypothesising that there’s a part of me that just sometimes gets irritated if I’m investing all my efforts to reach a specific goal, and I’m being hindered in some way. It may be that I just can’t seem to go fast enough, I simply can’t do it with the resources at hand (i.e. a deficiency in my own skill-set), or if I’m being disturbed too regularly.
But after spending the majority of the previous year coaching other devs, I’ve realised – thankfully – that I’m not alone in getting somewhat p*ssed off when my best laid plans do not come off in the way that I’d expected.
Why though? I know I’d be happier in my day job if I didn’t get into this arguably ‘destructive’ mindset. I’d be better able to reach that Zen like state of ‘flow’ where the mind is cohesively primed to tackle the problem at hand. I’d be less stressed for starters, and would simply have more fun when I’m doing what I’m doing for a living. Here in this post, I’m going to have a stab at discussing some commonplace frustrations I see in myself and others, and then look at what options – if any – we have for handling them.
Before I go any further, we do have to consider if it’s really that much of a bad thing that we do get frustrated at work. After all, it’s often desirable to be passionate about what we do. Surely the upside to frustration is that we are incentivised to remove whatever blockage is in front of us that’s causing frustration in the first place?
As to avoid getting out of my depth in philosophising what exactly frustration is, I therefore choose to refer to frustration in the terms of creating a destructive mind state, as oppose to a constructive one. This is drawing on a book I read by Daniel Goleman entitled ‘Destructive Emotions’. As he writes “With a destructive emotion, there will always be a gap between the way things appear and the way things are”. From my understanding, frustration will impede us when we consequently start to get bogged down in negative thoughts and doubts. Frustration is a natural emotion, and will happen to some more than others. It’s what it leads to and how we handle it that makes all the difference.
What frustrations are there in IT? Some will immediately argue that they are abundantly obvious. For example, I can vouch that software development can be quite a stressful place to operate in. We are given expectations and deadlines, we are constantly reviewed, we act as guardians to preserve the quality of the code we produce, not to mention that business requirements are always changing, and we are frequently interrupted with various meetings and with a whole host of other initiatives.
Other pressures include those of working in a team with a wide range of available skillsets. It’s very much a part of the day-to-day that you’ll be working alongside people that know much more than you in a given area, or on the other hand with people that know very little and require extra time to get up to speed. Looking at the Dreyfus model, where it is postulated that through the process of skill acquisition we move through five different stages, from Novice to Advanced Beginner then right through to Expert, it is logical to assume that each level comes with it’s own set of nuanced frustrations – as Dave Thomas writes about with level one.
So what’s the best way of handling frustration when it occurs? I wouldn’t claim to know comprehensively what the answer is, and individuals do vary greatly. I can think of colleagues that get regularly frustrated, or of those that possess such a Vulcan-esk like mentality that they wouldn’t seem to be able to grasp what all the fuss is about.
What I would offer is that improved self-awareness of when we are feeling frustrated is a good first step towards making our work-life more enjoyable. A second step is a measure of acceptance; it’s OK to feel frustrated, everyone does anyway so I don’t need to give myself a hard time over it.
Once we’ve accepted frustration, another option we then have is to be explicit to others about how we’re feeling. This is particularly useful in pair-programming. For example ‘I’m getting a bit frustrated with this coding problem as we’ve been at it for some time’, or ‘I’m lacking some understanding here, it’s just not making sense to me’. Being explicit about our concerns gives colleagues and ourselves a chance to invent some options about what to do about it.
I was in a pair-programming mentoring role the previous week where upon my pair immediately said as we sat down to begin: ‘I want tell you up front that I’m not convinced by this pair programming practice; I haven’t seen it to be much more effective and I’m finding it very frustrating’. This guy was much better to pair with than the majority of other developers I’ve worked with. Since I knew how he was feeling I was better able to help make things easier and not to aggravate his concerns. I suspect he was happier as he’d got immediately off his chest what was bothering him, and was able to have a clearer focus on the work we had to do.
All this said, about gaining awareness of frustrations, accepting them and making them explicit if need be, is much easier said than done. Doubtless, it comes much easier to some than others.
Meditation is one tool I know of that can help us to improve in this area. By increasingly our self awareness so that frustrations can be detected earlier, we give ourselves more options for dealing with them. Having a structured work plan is also effective. Making explicit the concept of ‘core’ hours where developers are immune to meetings and interruptions, and having frequent breaks when pair programming will certainly help.
Mainly though, let’s just be aware that software development can be… or is… a frustrating practice.