Pragmatism
If I had to identify a repetitive theme in my career, it would be the following:
- Learn the best practices for doing X (by experience, talking to others, reading books etc)
- Do X a number of times following the best practices
- 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:
- If you are new to a particular area, always start by learning the best practices. The best practices are there for reason and capture the learnings of others who have been down this road before. So it is definitely better to start with them instead of trying to re-invent the wheel.
- Once you have learned the best practices, start applying them aggressively in your day-to-day work without thinking too much.
- Suddenly one day you will realize that you have made a mistake and none of the best practices were able to help you prevent that.
- You try to understand what was missing and you define your own best practice that could have helped you deal with this situation. You can also identify which best practices helped save you time and keep track of those.
- Then you move to another project, take your curated list of best practices and then start applying them. And the cycle repeats…
