How-to: Thrive in Grey & Uncertainties when developing Software

Abdul Rafee Wahab
3 min readOct 18, 2021


Image Source: HawkPartners (visit site)

Um, what!? …

Software Engineers, and pretty much all IT Professionals face a wide range of challenges in all stages of their careers. We always want to provide the best experience for our customers, build efficient systems for our business. All while managing things like technical debt, dependencies, and differing personalities with differing perspectives.

It can get extremely easy to feel overwhelmed, especially if you do not give yourself time away from work. Easy to fall into a groundhog routine, where you feel the next day just runs into the other. You participate in all these meetings, but feel drained and can’t remember accomplishing anything noteworthy. You don’t feel as if you’ve learned much. And you go into a reactionary mode, questioning yourself, your career choices, everything.

Source: Giphy

So.. I should break it down, right?

I learned about this technique very early in my career (2016). But I only began firmly applying it in 2019. You have to break it down —

  • Break a giant problem into smaller subsystems.
  • Problem A => Situation A1, Situation A2, Situation A3, … Situation A{N}
  • Resolve step-by-step, thoughtfully and carefully

You have to tell yourself everything won’t be resolved in one day. But, you will take small, actionable steps and progress by resolving each piece of the problem day-by-day.

You have to focus. Focus on the what of the challenge, as opposed to the who and why.

You have to prioritize — make some type of plan (very brief) of what you want to get done on a particular day (or hour, minutes, etc.). So that things don’t overwhelm you altogether. Of course, situations will still fall out of the sky when you’re least expecting. That is the time where your patience is truly tested, and you have to be courageous and address it.

Share your experiences — talk through situations with your mentors, coaches, managers, and get a second opinion. Chances are, your imagination can be conjuring up situations that are not necessarily true in reality. You need mentors and seniors that you respect and admire that can reveal to you your blindspots.

Don’t jump into solutions right away — make sure you have a thorough and deep understanding of the problem/challenge you are aiming to solve. In large organizations, it is very typical to have multiple departments/areas focusing on different facets of one large initiative. It is seldom clear who is to do what. You have to identify what has already been done, and then plan your next set of actions, accordingly.

Always be curious — do not take things at face value. Make a habit of always questioning things — How can I make this better? Why does X belong here? Will this work as we need in the long-term?

This will not only help you grow as an engineer, but also continuously innovate and evolve your products and services with time.

Always keep things simple — Keep your goals simple, keep your requirements simple, and deliver. Do not overload yourself, or others around you.

(Most Important) You have to love yourself, others, and be patient — know your strengths, use them to your advantage. Even more importantly, know your weaknesses, and work towards outgrowing them. Do self-reflection while going for a run, think about your fears and ask yourself Why do I fear this? You alone are your biggest advocate, and know yourself best. Nobody will do this for you. And if they do, they will only continue it for so long. The fact is, in reality, everyone has something(s) they are struggling with, too.

Closing thoughts

Some of what I described above is easy to implement. Some of it will come with practice, persistence, and consistency. Bottom line is, take your time with whatever you do.

Source: Giphy



Abdul Rafee Wahab

Tech guy. I like building cool software, & also leading others in building cool things. All views shared are my own.