Opinions after a decade of professional software engineering

I recently came across an article by Chris Kiehl on topics they've changed their mind about after 6 years in the industry. It's an interesting article because it shows that opinions can change over time and that it's actually okay to change your mind!

I wanted to share a similar post - here's some of my opinions that have formed, changed, and stayed the same over the last 10+ years of my professional software engineering career.

What I've changed my mind about

I started programming when I was very young, so by the time I'd entered the industry I already had a lot of opinions about software. Those changed a lot after a decade- here's some opinions that I have now that would be at odds with my younger self:

  • There isn't just one right way to do things. There are all sorts of valid solutions to any given problem.
  • Relatedly, there isn't a "right tool for the job" there's just "the best tool you have for the job".
  • Code isn't even close to the most important thing about software engineering.
  • Software and software engineering are inherently political.
  • People who don't write code are just as important, and sometimes more important, to the success of a project.
  • There's no such thing as perfect code or absolutely "good" or "bad" code, but there is a difference between high-quality code and low-quality code.
  • The context in which software is used is constantly changing, so, design software so it can thrown away as soon as possible and replaced with something better. Or to say it differently: create software with clear purpose and boundaries so that if it does need to be replaced, the replacement can assume the original's responsibilities with little difficulty.
  • Writing code with others leads to better software and better software engineers.
  • Legacy code isn't inherently bad or wrong. It's software created by people who did the best they could with the knowledge and constraints they had at the time, and it's very rare to be able to understand the complete context around a legacy codebase.

New opinions

At this point in my career I have a hard time holding any really strong technical opinions, but I have a few strong opinions about the industry and practice of software engineering.

  • Communication skills and empathy are the most important skills for any engineering discipline. It doesn't matter how brilliant you are if you can't understand the needs of others, can't communicate your ideas, and can't work with other people.
  • Technology & software are inextricably tied to humanity. Technology can be both incredibly empowering and incredibly oppressive. It is our moral responsibly to create and use technology to empower instead of oppress.
  • People are the most important and most difficult aspect of software. Every feature, interface, behavior, etc. should be done with people in mind.
  • While we're talking about people, Accessibility isn't optional.
  • Documentation, tutorials, examples, etc are critical. Technical writers are extremely valuable.
  • Mentorship is critical for software engineering - we can't empower newcomers without it and we can't grow as people and engineers without teaching others.
  • Code review is necessary, important, and hard. Submitting and reviewing code with empathy, grace, and understanding is a skill that has to be continuously practiced.
  • Compared to most other professional engineering disciplines, software engineering is an absolute trash fire.
  • Multi-faceted testing leads to better software in less time.
  • Use an automatic formatter whenever possible, and never be nit-picky about style that can't be done with an automatic formatter. Code review isn't a place to be a human linter.
  • I would rather die than participate in another "whiteboard"-style interview- either as a interviewee or interviewer.

Opinions that have stayed the same

There's only a few things that I believed a decade ago that I still believe now:

  • Open source is the heart of software engineering and the key to empowering people with technology.
  • Being involved with a community is the best way to grow and learn.
  • Software can be art. Software can be created to express thoughts, emotions, opinions, experiences, etc. and it can appreciated as interesting, emotionally challenging, inspirational, and beautiful.
  • Gatekeeping and elitist attitudes are horseshit.
  • We need more diverse people in our field - across gender, race, nationality, religion, income levels, etc.