About seniority and engineering

Recently, Andrés Pagella just gave me a really interesting article. “On being a senior engineer” is a must-read even if you find hard to follow a huge article in English. I spent invested about an hour in order to finish it. And I will highlight the parts I liked the most:

Senior engineers don’t know everything. They’re not perfect in their technical knowledge, and they’re OK with that. […] In order not to confuse titles with expectations that are fuzzy, sometimes I’ll refer to engineering maturity.

  1. Mature engineers seek out constructive criticism of their designs.
  2. Mature engineers understand the non-technical areas of how they are perceived. “This also means that mature engineers have self-awareness when it comes to their communication. […] There’s a difference between calling someone a moron and pointing out faults in their code or product. […] Nothing indicates that you have a lack of perspective […] like a poorly thought out and nonconstructive tweet that slings venomous insults.”
  3. Mature engineers do not shy away from making estimates, and are always trying to get better at it.
  4. Mature engineers have an innate sense of anticipation, even if they don’t know they do.
  5. Mature engineers understand that not all of their projects are filled with rockstar-on-stage work.
  6. Mature engineers lift the skills and expertise of those around them.
  7. Mature engineers make their trade-offs explicit when making judgements and decisions.
  8. Mature engineers don’t practice CYAE (“Cover Your Ass Engineering”)
  9. Mature engineers are empathetic.
  10. They don’t make empty complaints.
  11. Mature engineers are aware of cognitive biases. “I’ve seen engineers fall prey to are: self-serving bias, fundamental attribution error, hindsight bias, outcome bias, planning fallacy. […] Seek and accept input from others, especially when you think it’s not needed.”

The only true authority stems from knowledge, not from position.

The Ten Commandments of Egoless Programming

  1. Understand and accept that you will make mistakes.
  2. You are not your code.
  3. No matter how much “karate” you know, someone else will always know more.
  4. Don’t rewrite code without consultation.
  5. Treat people who know less than you with respect, deference, and patience.
  6. The only constant in the world is change. Be open to it and accept it with a smile.
  7. The only true authority stems from knowledge, not from position.
  8. Fight for what you believe, but gracefully accept defeat.
  9. Don’t be “the coder in the corner.”
  10. Critique code instead of people – be kind to the coder, not to the code.

The web is inextricably tied to the notion of publishing and sharing information, globally.

I highly recommend reading the full article which also contains references to a lot of resources that found this opinion. Some time ago I’ve written a more humble article about a job description for front-end developers which I found quite nice. Perhaps this article is a lot more professionally accurate.

(this post was originally written at some old blog I had)