Handling tough decisions

First day on the job you probably, arbitrarily chose your first language or even more likely someone else chose it for you. Your path has so far been easy with what you need to do either being dictated to you by some kind of boss figure. This maybe literally your boss, a client or even market forces.

However as your career grows, you will find yourself having to make more and more decisions. Your decisions will have far reaching impact and will likely be affecting not only your but other individuals as well. As you grow into this new roles you might need some new tools in your tool set to help you deal with some tough decisions.

What makes a decision tough? The obvious answer would be a decision that has a huge impact. If you thought so, then you would be wrong. To demonstrate this, think, if you came across a person shot and wounded in the street, would the decision to take them to hospital be a tough one? Yet the impact would be huge!

So what does make a tough decision? You have yourself a tough decision when among the options there are no clear winners, one option is good in this way the other option is good in the other way.

Finding yourself in this position can be agonizing where at night you sleep having decided to go with option A and wake up feeling option B might have been a better option after all.

While there are no silver bullets, there certainly are strategies of dealing with such issues, one of which I am going to present today.

Weighted Average Decision Matrix (WADM)

WADM is decision tool that helps you break down the decision into decision factors which you can then quantify and compute to come up with an objective value of a better decision.

To work, the tool requires at least two decisions. In our case we are going to give an example of PHP frameworks.

Your team has been tasked with building a cutting edge SAAS application and you need to choose between using Phalcon with its super performance or Laravel with its expressive style. Which one will you go with?

Step 1: List out the factors

List out all the factors that are important in a framework when building your SAAS.

Step 2: Write relevant importance

On a scale of 1 – 10 write out how important each factor is in your decision

Step 3: Weight the options

For each option rate it on 1-10 on how the option fairs in that factor.

Step 4: Calculate Weighted options

For each factor multiply the relevant importance by the weight of the option. I have separated out the weight for easier computation in a spreadsheet.

Step 5: Compute the sum

Finally compute the sum of the weighted options to get your decision.

Using the WADM method, we have been able to establish that Laravel is the better option for your project.

Hopefully this technique will save you countless hours agonizing over your decisions.

How do you handle tough decisions? Tell us in the comment section below.

You can check out the spreadsheet used here.



Go deeper to become better

You have been assigned a new and foreign task, say you need to ensure that each new registered user gets a nice welcome email. Your platform of choice is laravel but you have never really worked on this task before. What is the first thing you do?

If you are like most people you simply look up the documentation and copy paste something like this to your code.

Mail::send('emails.welcome', $data, function ($message) {
    $message->from('us@example.com', 'Laravel');


You would then go right ahead and modify the code to fit your own context say

$data= ['user'=>Auth::user()];
Mail::send('emails.welcome', $data, function ($message) {
    $message->from('admin@chenchatech.com', 'Web admin');


And you are done! Now just stick this in the registration process and all is dandy. So far so good, you needed to deliver fast and you have, but is that it? Do you even understand what is going on?

Unfortunately this happens so much in programming that it’s an accepted practise and for good reason too. It’s quite easy and even profitable to depend on other peoples knowledge of fundamentals. We do this all the time and tell ourselves that later we shall take the time to go back and understand it but do we ever do it?

When crunch time comes knocking and you need to implement a novel use case in a week, you will need months just to master the basics, so why not start now?

So next time you come across a new problem how do you handle it?

First and foremost break the copy and paste habit, instead think about new concepts as a mental structure to be anchored upon existing knowledge. If said knowledge doesn’t exist, then build that!

Secondly try to understand the historical context, in our example above, try to see not just how laravel does it but how is it implemented in PHP? On what RFC is it based?

Thirdly think about the concept as it relates more generally in this case we are thinking about communicating with a just registered user. This might even give us insight into a better design maybe a class RegisteredUser where you can add this routine as well as other routines associated with newly registered users.

Lastly, think about underlying computer science concept. This is especially true for more complex problems. It just maybe that what you are trying to solve is a common problem with an efficient algorithm already discovered. Then again it maybe an unsolvable problem. Either way you have saved yourself a ton of time!

Putting this principle into practise will quickly deepen your knowledge and give you almost superhuman powers in solving your engineering problems. But all is not rosy in this world, it will become tempting to continue specializing to the point of losing the broader perspective of what is important in your project. At one point enough information will be just that, enough.

Do you possess deep knowledge in your field? Tell us in the comment section below.