effectiveness as an engineer

Your effectiveness as an engineer is not defined by the output that you deliver.

Software engineering is what happens to programming
when you add time and other programmers.

Programming is the pure and simple out out of instructions that tell a computer how to do some task. It’s the purest type of code writing, you and the machine. It’s “getting a program to work”, it’s “solving a problem”. Programming is a solo activity, you and the computer. Your effectiveness as a programmer can be measured in terms of how well the program works.

For programming to become software engineering you must add time and other programmers. This makes it collaborative. It’s no longer a solo activity between you and the machine. If software is inherently collaborative, your effectiveness as a software engineer is the extent to which others want to work with you. If others don’t want to work with you, but your code works well; you are an effect programmer and ineffective software engineer.

For many teams of software engineers there needs to be a role within the team that helps guide the direction, set the vision and lead the engineering effort. This person does not need to be the most effective programmer, but does need to be an effective software engineer as they need to be collaborative. Call this role a “tech lead”. Leadership is about giving guidance, support and enabling the team to deliver more than the sum of each individual programmer. Your effectiveness as a tech lead is the extent to which others want to be in your team.

Your effectiveness as:

  • a programmer is the extent to which the program works
  • a software engineer is the extent to which others want to work with you
  • a tech lead is the extent to which others want to be in your team

However, if the only people who want to work with you are a small tight-nit group, then you’re not effective. Instead you’ve successfully build a clique; the opposite of collaboration. You are ineffective.

Finally; do not conflate the trappings of success with success itself. If you are really popular, but fail to build software, then you have failed at being an effective programmer or effective software engineer. Each layer builds on the one before it. Each is a foundation for the next. The only true authority comes from knowledge.