“I can’t do it, I’m scared”, I would say to my mum as a youngster. She would always give me the same advice: “do it scared”. What I learned is that if something is worth doing, it’s worth doing even if it scares you at first – this is also true in software development.
In software, we are often faced with things that can seem intimidating. We may be assigned a project that we know nothing about. We may have to use a new tool or environment. We may be working with people who can seem intimidating. The natural temptation is to retreat to a place of safety, but that won’t get the job done. So how can we, as software developers, overcome the instinct to cower when projects seem daunting? I’ll go over a few things that have worked for me under these circumstances; your mileage may vary. If there are any tips you have, please add them in the comments section.
The most important thing is to make a project manageable, to stop it from looming over our heads and cut it down to size. Most of us can’t fit every detail of a complex system inside our heads at once. This is why, no matter the scope of a project, it is useful to have a planning phase. I don’t quite buy the “the code itself is the specification” tenet some developers hold and prefer to break the problem down early from the customer’s requirements into sets of technical tasks. I create them as tickets in a bug tracking application such as Unfuddle or Trac. From these tickets, I can generate a technical specification document if required and assign tasks to colleagues. At this stage, I cross reference my tasks with the business requirements to make absolutely sure I am delivering a system that actually meets the customer’s needs, rather than being “broken as designed”, which is the worst kind of broken.
Having tickets helps me feel comfortable with the project and gives me attainable short-term goals and mid-term milestones. Working this way, allows me to feel a growing sense of accomplishment as I proceed.
No one person can store all knowledge in his or her head and we all have strengths and weaknesses. Asking questions on tech sites such as Stack Overflow or talking through your plans with colleagues can be daunting but you will generally find that people are helpful. In a software team, I’d say that our differences can actually be one of our greatest strengths. We should not expect to be (or be expected by others to be) entirely self sufficient; that’s why we work in teams.
Sometimes you may have to deal with a colleague who makes you feel two inches tall when you ask for help. Such people often have a lot of specialist knowledge they jealously guard, and they may feel defensive and perhaps even insecure, as if surrendering this treasure somehow lowers their worth. This can be hurtful but it’s worth persisting and perhaps the person needs encouragement just as much as you do. In this circumstance, I ask the question politely and appropriately and if I get a flippant response I persist until I get the help I need.
Once I know exactly what I’m shooting for, half the battle is over I can start coding. Test Driven Development (TDD) helps me to feel comfortable and is a form of programming by contract. When I am using TDD, I develop much more quickly because I don’t have to compile/bootstrap a whole system with every minor change. The code I produce via TDD is cleaner and more robust, and other developers can refer to the unit tests to see examples of its use. With TDD, I know as soon as I’ve broken something in the system, or if another developer breaks it.
Martin Fowler’s Refactoring and Kent Beck’s Test Driven Development make even more compelling arguments to use TDD, to the point where I feel that development without unit tests is actually irresponsible.
Software can seem overwhelming. The more we learn, the more we realise how much there is to learn - more than one person can possibly know. As software developers, we will always face fresh challenges. Nevertheless, a life worth living will take you out of your comfort zone time and time again and positive thinking, teamwork, good practise and organisation can help tackle daunting tasks.
Don’t let fear hold you back.
Do it scared.
Comments
9 comments
John Rockefeller said... 13th Jan 2010, 20:42
This is a fantastic post. I especially love the "Use the Skills Around You" part. I find that oftentimes when I feel apprehensive about something with work it's usually because I don't know enough about it. Asking questions always helps, even if they seem like dumb questions.
One other point: Sometimes being scared also is telling you that you shouldn't be doing something. In these cases, there is almost always a better way.
Dean Macaulay said... 14th Jan 2010, 11:14
Great post! Its very reassuring to see that others are having similar experiences.
Mel Pullen said... 15th Jan 2010, 02:19
So: "I cross reference my tasks with the business requirements"
That's waterfall.
And: "If a project is affecting you negatively, seek help from your colleagues or line manager. "
That's a hierarchy.
I have only one word to say: Scrum
Marry - Offshore Software Development said... 19th Jan 2010, 12:32
Hey Gavin Davies thanks for sharing the information. It is very useful.
We have used an award winning offshore software development company www.ardentisys.com that has helped with a cost effective and efficient solution in this area. Look forward to your next post.
SMiGL said... 25th Jan 2010, 11:22
Great post. Thanks
Software Development said... 22nd Feb 2010, 18:32
that's really a fantastic post ! added to my favourite blogs list.. I have been reading your blog last couple of weeks and enjoy every bit. Thanks.
Ravi said... 22nd Feb 2010, 18:38
Nice article.....I really impressed while reading your post.....Thank you so much , it will useful to every one....
Software Development
cici said... 23rd Feb 2010, 01:22
top edhardy high shoes
www.lookedhardy.com
Software Developer said... 23rd Feb 2010, 19:44
that's really a fantastic post ! added to my favourite blogs list.. I have been reading your blog last couple of weeks and enjoy every bit. Thanks.