I have worked in some of the best tech companies in the world, which are able to attract the best of the best software engineers with remarkable skills. Despite so, it is sometimes very sad to see that they are not reaching their full potential or even leaving such great organisations.

There is a lot reasons behind this, and one of the main reasons is they have managers that suck.

This begs the question. What makes a top-notch software team leader?

A great manager watches for your back, he/she is person that you could rely on and this builds a strong foundation of trust.

A great leader cares about his/her team, spend time with you to understand your goals and mentor/teach you to grow and learn. He/she knows if his/her people are taken care of, the team will be successful at the end. All team members are on the same ship with the leader. The captain of the ship is responsible for the ship direction and the sailors, which leads a successful voyage. And this why it is very important for the leader to set up a successful example, because every action from the leader is watched very closely and mimicked by everyone on the team. The leader defines the culture of the team.

A bad manager on the other hand, only cares about his/her own self-interest and career advancement. In order to advance, he/she hand you over load of work disregarding your interest. Sabotage and manipulate you to an extent where you are so confused and doubt yourself. This manager led to the environment eventually become very toxic. I advise you to leave if you realise this is the case, life is too short to support such values/behaviours, change while you can before you get burn out. If you stay long enough in such place, you might even become one of them unconsciously as you pick up your habits from your surroundings.

Passion, humility, empathy and integrity are the most important attributes that I look for in world-class leaders because I believe these attributes determine he/she is going the right direction, and eventually lead to success.

Throughout the years as working as a software engineer, I picked up valuable engineering skills. What I did not realized is that, applying them can be challenging in unexpected situations.

Problem solving

A plumber came to our house to repair a water leak in our shower today. Initially we found one, Plumber A, through recommendation from our network, but maybe because he was too good so he was too busy to come, we waited a week, and went with another alternative.

Plumber B is less popular which is good in a sense that we can book him sooner, we were a bit skeptical at first, but since we want our shower fixed asap, we took the risk.

He took out the cold and hot shower knobs, a bit of moisture, but no leaks by surface inspection. Then he remove the shower tap at the top, put the pressure meter on, turn the knobs, result: losing pressure.

He quickly deduce that the leakage must be somewhere between the tap on the top and the knobs under, and in order to find it, he must drill through the bathroom tiles, starting from the bottom. He seems to know what he is talking about, the logic sounds reasonable, and I respect his expertise. I permit him to drill.

He was now thinking he might have enough time, because what we told him is that it was just a shower leak. He thought about a little, and decided to give it a go. He brought in a big drill from his truck, and then decided it was too big, then he brought a smaller one. Everything looks good to go, and he drilled. Our new shower tiles broke into pieces, a hole is done, most likely the water proofing is also damaged. Interestingly, no water, and dry.

He looked a bit puzzled, because this is not what he expected. Just in case, he pressure tested each of the knobs, seems still losing pressure. He now went out the front yard, and attempted to find the water meter and shut it down. I pointed him where it was, he shut it down, he now took out the knobs entirely and examine them front to back, problem found: one of the knobs looked damaged at the back but not at the front, so he missed it.

He replaced the damaged piece, and placed everything back. He was pretty honest about drilling the hole incorrectly and charged a lower rate for labour.

Now the shower is fixed, but with a hole in the tiles. What sucks is that fixing the hole is 5 times more expensive then fixing the leak.

What Went Wrong

When he concluded that there must be a leak between the tap and the knobs, I asked if there are any other cases that might cause the same situation, he said no.

Lesson 0: I should have stopped him, never trust experts blindly without analysing ground-up from fundamentals.

Lesson 1: Before doing anything that is irreversible, pause and think about the alternatives.

Lesson 2: Every variable parts of the equation needs to be examined thoroughly, don’t make any assumptions. I.e. The knobs need to removed entirely and check that there is no fault before concluding it is fine, and move on to drill the hole in the tiles.

Lesson 3: Experiences matter. Plumber B looks much younger that Plumber A. And when Plumber A examine the shower during his initial visit, he smirk and suggested to remove all the parts and replace them first and see if the problem is fixed, then check the water pressure or even drill the wall. His principle is do the things easiest first and he is right. He might even think this job is too little, and cannot even bother to come again.

What this translate to is that someone from a 12 week boot-camp is cheaper to hire and passes the technical coding interview, but the senior guy with years of experiences will most likely cost you less overall even his salary might be much higher than the boot-camp guy. Don’t cheap on the salary and value experiences.

Lesson cost

6 times of the original fix cost.

Conclusion

Still far better that what we originally expected.

The wall was a brick wall so the water did not affect it.

We thought that it might be the water proofing instead of the shower leakage that went wrong, which means it could be substantially more expensive to fix.

I can learn what he had done from Youtube, it won’t worth my time and require to invest in tools and parts, which I will rarely reuse, but I will probably avoid drilling first definitely, so if it did it myself, I would save some money by trading off time.

Anyways, problem solved with a cost, and not the optimal way – the shortest and cheapest path. As a engineer this really bothers me a lot, a non-clean solution.

One of the things I realized after so many years working in tech is that, developers lack design skills.

Design skills? I am not a designer, UI expert, what the heck I care?

Software engineering is evolving, teams are getting smaller and there will be no designers on the team.

A few years ago, there is level 3 support, a QA team, a system admin team, a development team, a project management team, a documentation team, a business analyst team, a design team, a architecture team, and a management team,

IT Infrastrucure is in the cloud, no more IT admins. DevOps we call them these days, but this will change soon too, devOps and dev will consolidate by a DIY API enabled service, heard of AWS?

QA team became outsourced at first, offshore. Then the local team got so fed up by the timezone problems, scheduled calls, quality of services etc. Then Entreprise tool companies raised and took over, Atlassian. QA became continuous integration, automated testing, all managed by dev themselves.

PM/BA/Management? Just use a Trello board. If you like graphs and show off your ‘organizational literacy’, Jira will better suit your needs.

What is left now? Support and Developers. Where are the designers? Yes you might say you can find some freelancer to do the initial wireframes. A full-time employee on the team just drawing? I really never seen one.

What is the outcome? Software built by engineers with no taste. A brown background with black color fonts, luckily Sans Serif. An error message with no meaning. filling in pages of form to sign up.

Designers and dev need to merge, either learn design skills or another company automates this. So in the future, they maybe titiled as f̶u̶l̶l̶-̶s̶t̶a̶c̶k̶ ̶s̶o̶f̶t̶w̶a̶r̶e̶ ̶d̶e̶v̶e̶l̶o̶p̶e̶r software designer.

Software development is valuable. Unlike normal complex business processes, software scales, once a program is implemented, it can be ran repeatedly, scheduled at any time and the most important, without human errors.

With such great benefits, any tasks within a company should be automated if the amount of effort to automate is less than doing the task manually for the foreseeable future.

The problem is though, virtually everything needs to be automated.

So if everything within the company needs to be automated, then how would you do so efficiently as a developer?

Here are the four steps to take:

Map out the whole workflow to have a full big picture of what is going on. By doing this, you will discover a lot of domain knowledge that you are not aware of previously.

List out the major workflows, and rank them accordingly based on the effort saved if automated and inversely to the amount of automate effort.

If the workflow is too complex, break down them to sub-workflows, and do step 2 again.

Now you should have a long list of automation tasks, put them into Trello, and focus on nailing them one by one.