Site icon Surviving Engineer

What is the hardest skill to teach in software engineering?

Photo by Allan Mas on Pexels.com

Pragmatism

If I had to identify a repetitive theme in my career, it would be the following:

  1. Learn the best practices for doing X (by experience, talking to others, reading books etc)
  2. Do X a number of times following the best practices
  3. Identify the situations in which the best practices don’t make sense and ignore them in those situations

This is the essence of pragmatism i.e. knowing when to break the rules. In my experience, applying this skill effectively is what separates the great engineers from the good ones. The best engineer that I have ever worked with was a master at this. He could architect really elegant systems but could also put in ugly effective hacks when that was the need of the hour. (A lot of good engineers struggle to make this adjustment. This is usually a function of the companies they have worked for and the kind of work that they are used to doing. The really great engineers have a lot more variety under their belt and it makes a big difference in the kind of decisions that they are able to make)

But why is pragmatism hard to teach? Can’t we just observe what great engineers do and follow their lead? If your takeaway from observing another engineer is something like “Always do Y when Z happens”, that would make it a best practice which again has its limits! It maybe useful if you are faced with a similar situation but that isn’t sufficient to know what to do when faced with a new situation with no parallels to draw from.

While pragmatism is hard to teach, it can still be learnt from experience. Here is a path to grow this skill:

Exit mobile version