I've been programming for over a decade. During that time I went through several pretty difficult scenarios in my programming assignments. I want to share some thoughts in this post.
There are situations when we are not quite sure how to implement a particular feature. For example:
In all the above situation we may underestimate the effort needed to successfully implement a feature before the deadline. We, as professionals, want to provide pretty accurate (and potentially small) time estimate. Unfortunately, software is currently so complex that we should expect the unexpected. Otherwise, we need to know how to recover from exhausting an sprint.
Here are some tips on how I learned to tackle such cases.
Have a plan and stick to it - this seems obvious, but sometimes we are so confident that we skip planning. We jump straight into programming (this is what we love!!!). Unfortunately, if we meet difficulties, our estimates go to hell...
You may ask what difficulties? Let's name a few: 1) different database, 2) system components updates, 3) unmaintained printer drivers, 4) expired SSL certificates and many others.
That is why we need a backup plan. A backup plan can consist of an alternative solution or a recovery procedure :) Both of them require some extra time, but should result in a working solution (even without implementing the feature this time).
Usually, the work result is not kept in isolation. Other teams/organization units/departments are probably waiting for us to deliver on time (or better earlier :) ). Sharing progress also shows our professionalism, mental experience and transparency.
Because of that, we should communicate the progress as often as possible. This includes both good and bad news.
Don't try to reinvent the wheel - ask for support. Don't be afraid of losing your professionalism because you don't know something. You are not alpha & omega.
Teamwork works best when communication is effective. In supportive organizations, every employee is entitled to ask for support if he/she meets unexpected issues. For a .NET developer, this could be configuring Nginx server or Linux firewall.
First thing before involving another person should be asking yourself if this is a single question or a number of questions related to the same topic. If it's the second option, then probably reading documentation is the most appropriate thing to do before bothering others in the first place.
On the other side, you should not ask about everything. If you end up asking about everything then you are in a wrong place...
This is the most annoying thing when people ask me about something. They have problems with describing what is their problem. Advice: Synthesize a precise question. Provide context (some sample code or some description). Try to include the big picture in your question. There is not much more annoying than when I answer a question and then there are 5 variants that finally lead to a totally different approach... a waste of time...
Sometimes we end up in a situation when nobody knows the answer. In that case, google is your friend. Seach on product forums, blog posts, StackOverflow questions. Sometimes event browsing the source code could give you some hints. Just spend some time and investigate. I know it's not easy...
So finally you have delivered the feature! Congratulations - don't hesitate and celebrate for a while :)
I encourage developers to write "Lessons learned" documents after a stressful period is over. Such documents have two-fold value.
This is how you learn.
As you can see from the post, recovery is not something you can do after the problem occurs. You have to be prepared up-front.
Taking a few days off after exhausting development will not help you in the long run. Next time you will have to be prepared in a more structured way. That's why I encourage you to, at least, try the recovery framework proposed above.comments powered by Disqus