Software Coder, Software Developer or Software Engineer
Most of the time we use the “software coder”, “software developer”, and “software engineer” terms interchangeably. In the big software development society, they implement the software. Other roles are usually the Product Owner, Project Manager, Business Analyst, Tester, Scrum Master, etc. So far so good. But as a software engineering manager, I see a distinct difference between these roles mentioned in the beginning.
Since I always love to use analogies, let’s imagine that we are not about writing software but playing football with a team.
Our players should be good at playing football. We expect them to pass and shoot precisely, follow tactics, have good stamina and physical conditions, etc. They play in different positions. There are goalkeepers, defenders, midfielders, forwards and so forth within the team. So far, this could be true for any team, including a professional team or some friends playing football in a backyard.
In amateur or even semi-professional teams, our players might be late for training, shout at the enemy players for perceived faults, be selfish by not passing to each other, and blame for everything among other problems, but they like to play football and we have our football team.
Some teams are better than others. They might be sponsored or owned by a local municipal and they play in regional championships and even win some trophies occasionally. Still, they are playing for themselves. It’s still about having fun together and doing sports next to their main professions.
Now imagine that we have a professional team, even one of the best teams in the world if you like, such as Chelsea, Real Madrid, PSG, or your favourite one. Millions of dollars are spent on good players. There are not just owners but investors, and huge companies as sponsors behind the club. The players are not just good at playing football but world-class, just like their compensation.
Would we tolerate it if our players are repetitively late from training, shout at the referees, and ignore the coach’s instructions? Unlikely we would. We would expect even more.
We would expect from our professional players that on top of being good players, they can talk to the press, not blame the club or other players after a loss, do not appear in the tabloid press in questionable or unethical situations, wear the club’s uniform at formal events, etc. We could continue this list for a long time, but you probably got the point already.
As a software engineering manager, I see my team as a professional football team, not as an amateur team or as friends playing football in their free time. While all the software coders, software developers and software engineers can write code well, I’m generally looking for software engineers for my team. But why?
During my career, I only developed big enterprise software, where the business context and the working environment are complex. There are various stakeholders often demanding contradicting requirements. The IT infrastructure is a mess. No one seems to know the next steps. Deadlines are simply unrealistic. Bureaucracy and processes all over. Decisions are often made authoritatively without pragmatism and logical evaluation.
When the software is for a client, we need to adapt not just to our own company’s culture but to the client’s culture too. A big portion of the work has nothing to do with the codebase, but with communication, persuasion, going after details, presenting alternatives and options, sneaking into people’s minds and collecting the necessary information to get the job done. And this is all done in such a positive and pleasant way, that all of our stakeholders, clients, colleagues, and literally everyone enjoy the work with us and take us to their next projects too.
The below diagram might give a rough idea of what differences I see between the “software coder”, “software developer” and “software engineer”. It does not intend to be complete but rather serves as a draft for your own list.
Comments