The hardest part of software engineering

A few days ago, I had yet another debate about how LLMs will eventually replace software engineers.

I had a thought about my curriculum:

  • Algorithms
  • Coding
  • Software Architecture
  • Version control
  • Project management
  • Team work

Whenever I encounter someone who has no or little knowledge about computer science, they focus on the hard skill.

It is true that being able to produce usable code takes times.

Beyond this, understanding software architecture and mastering the software development life cycle takes a lot of time and effort.

When I talk to management people, they may emphasize teamwork for those who are concerned by people or project management, for those concerned by KPIs.

We could say that teamwork is the least taught skill and the most important one.

It is also true that usually, people forget that software engineering is a team sport.

But the hardest part is actually building consensus.

There is a sentence I like from Meditations by Marcus Aurelius:

When you wake up in the morning, tell yourself: the people I deal with today will be meddling, ungrateful, arrogant, dishonest, jealous and surly.

Today I have dealt with developers, QA, PM, PO, ops people, and C-levels.

They all have a slightly different understanding of the same thing, a slightly different opinion, and your role is to build the bare minimal shared understanding, so a consensus will arise.

And this is the hardest skill of software engineering, which is taught nowhere.