Is it okay to fail?

I believe that I have conditioned myself to fear failure, that a mistake or an error in judgement is so bad that I am no longer a good colleague or person, that I don’t add value to my team. 

On the flip side this fear drives me to prove to myself and others that I can add value.  Fear of not being able to do a job that I love.  Fear of looking like an idiot in front of people I respect.

When writing this post I researched planning to fail in software development, one of the first searches I did brought back articles on how software projects fail, not any about how to learn from failure of the software project.  I find that amazing. The mantra, “Failure to plan, is planning to fail” was everywhere.

Why should I be so fearful?

In the software development world, isn’t it our failures that shape our career, our experiences, and our learning more than successes? If you think about it, software developers around the world are failing every day from defining logic incorrectly and having to find a different approach to the problem to finding bugs in their code or their users finding bugs in their code. 

Scientists fail but they use the evidence of their failure to continue and each failure gets them closer to a successful result. Even a toddler trying to walk for the first time fails but gets up and tries again until they can walk.

I believe that I need to start thinking of failure as a good thing.  To turn what is thought of as a negative into positive and stop the fear.    Treating every failure as a chance to get better and edging closer to a successful result.

How have we got to the point where failure isn’t planned for?

I think that one of steps to take is that failure should be planned for.  I have recently started to try and run every day “a running streak” and one of the pieces of advice that I have been given is plan to fail.  This lets me think of all the obstacles to stop me going a run and remove them by thinking of all the pitfalls ahead of time. 

One of the most obvious things that could help is testing, unit, integration, system, and manual testing.  The more tests that cover the code or each area of the system will mitigate the risk of failure.  What if you do write/complete all the relevant tests? If a developer makes a mistake and even the unit tests are wrong. You could have acceptance testing with the user.  What if the user doesn’t notice? Involve the user, communicate plans and failures to them.  There are numerous scenarios that you could go through.

What about building time into plans for rework and bug fixing? 

In a perfect world we would like to think that our code will not need re-worked or that any bugs will found but inevitably this will happen so why not build it in to the plan.  A user testing might not like a particular feature, the feature might not be correct, or a bug might be found. It would be better to be prepared.

Is failure accepted?

As software developers we can get into the hole of thinking that our code should be perfection and go down this silly road of thinking everyone else’s code should be as well.  We are not accepting of mistakes especially if the pressure is on.  We have all written code that six months down the line, we say to ourselves “What the hell was I thinking”.  We need to cultivate a culture of acceptance of failure.  Communicate with your team that it is okay.  Be humble and listen to the developer fixing the code.  Developers will then relax and produce better code as a result.  We write better code when we are happy!

So I am finally realising that it is okay to fail and that it happens more than we realise.  To not be too hard on myself (although that might take a bit of work).  It is healthy to fail.  Each refactor is a change to improve and get better even if a bitter pill to swallow or a brief period where you feel like an idiot.  I believe that we need to get away from defining success and failure as binary and try to think that all the failures encountered could lead to success…eventually.

I hope you find this post useful.  I would be interested to hear your thoughts?

Am I doing enough?

It’s Saturday afternoon, you are spending some quality time with the family but your brain is nagging at you to switch the laptop on or go upstairs to your computer and start knocking out this wonderful new application full of the stuff that you want to learn or improve your understanding of.  You could also catch up with a bit of work, do a few emails, save time on Monday morning.  You will only do a little bit.  It will take only half an hour….  If this is familiar feeling, I don’t think you are alone.

I’ve seen a few posts over the years including I’m a phony. Are you? by Scott Hanselman and Syndromes Drives Coders Crazy in Business Insider.  It interests me and I want to research a bit more.

The closest word that I can associate with that feeling is guilt (developer guilt) but it isn’t really that.  I constantly feel a nagging that I am not doing enough and I always attributed to a need for absolute perfection. 

Most software developers see their job as a craft and as part of that, you need to hone the skills to make you a better craftsman.  As anyone that wants to do well, you need to learn and practice.  For a developer, this is coding, writing blog posts, reading books, researching topics of interest, social media, and podcasts.   I do all of these points (not all at once) and still feel guilty or feel like a phony if I don’t organise myself to give myself the time to do it properly or don’t give my full focus to the task.

Question: Is it okay or even good for you that you spend every waking minute at a computer and don’t give you brain time to switch off to focus on something else? I don’t believe it is. There is a balance that needs to be struck, there is no doubt.  There is a real risk of burn out and lower productivity if you are at the coal face for extended hours on a regular basis and then that makes you no use to anyone least of all yourself and the people you care about. 

So here’s what I do stop these feelings, everyone likes a list, right? I try to sit down on a Sunday and plan my week.  I do this for non-technical tasks as well like making dinners and exercising.  I feel it is better to plan as much as possible.  I personally use Trello but it can be Google calendar tasks, paper, or anything else that you are comfortable with.  I set my board up with lanes for each day of week.  I also have a lane where I initially put all the tasks as I think of them.  Secondly, I will think how long that the task will take or how long that I will spend doing that task.  I use the pormodoro technique and each pormodoro is twenty five minutes.  I have set up coloured labels, each representing a number of pormodoros’ and these are attached to each task.

This helps me to feel better that I’m doing everything I can possibility do to stay current and add value to my career and my workplace.  It allows me to have time with the family but still have the focus to learn and to stop the worry.  I like to worry.

Another lesson is not to not be too hard on yourself, there will be days when you don’t feel like sitting at the computer reading blogs.  There will be days when everything goes wrong.  There will times that you don’t understand what you reading.  There will be times that someone will ask a question and you won’t know the answer, but that’s okay. 

The point is that you are asking yourself the question “Am I doing enough?” in the first place and taking the steps to resolve the situation.