Software Engineer vs Software Developer
What is the difference between ‘Software Engineer’ and ‘Software Developer’?
This question can be answered in the realm of engineering and software. But the full answer enters into sociology and psychology. Let’s begin from this perspective of sociology and psychology.
Sociology and Psychology
Ever wonder why universities, especially the most prestigious ones, have such majestic structures and elaborate ceremonies? It’s to instill this perception in peoples’ minds that the difference in education they offer is so tangible that you can see and feel it. And of course, the most important aspect of making this difference real and physical is the paper degree that is awarded at the end. All of these mechanisms have the important effect of giving the receiver a sense that they are in the club of knowledge. One of the greatest benefits of this club is the networking. Very often, these traditional institutions are dominated by generations of the same families who have over-sized influence amongst their communities. This generational mechanism is codified in traditional institutions by what’s known as Legacy Preferences. The converse effect of this club of knowledge mechanism is reducing knowledge sharing outside the club. This increases the power of traditional institutions of education and perpetuates this circle of generational protectionism, reducing a nation’s breadth of innovation and opportunity.
The field of engineering has similar mechanisms for instilling this club mentality (for the purpose of information asymmetry a.k.a. knowledge withholding) that is reinforced through physical structures and elaborate ceremonies to make the boundary feel tangible in the minds of the people. Historically, these mechanisms evolved from occupational guilds. Adam Smith referred to guilds as a conspiracy against the public (1776 , ch. X, pt. II, p. 152) for their actions beyond simply raising prices.
The breaking down of these imaginary barriers is inevitable and this process has been underway for decades. The internet is speeding up this process. A degree is no longer necessary to attain employment that would traditionally be considered prestigious. However, the treatment one receives after entering such employment is an open question because of the mentality of information asymmetry that has been instilled amongst the majority who did enter into the private sector via pipelines created by traditional institutions of education. It’s for this reason that one must be cautious during collaborations.
These imaginary boundaries feel tangible to the people who work in their respective fields, such as engineering. They feel tangible to all members of society, as well. Peoples’ entire world views are built around these boundaries. It’s how they classify people as being in one class or another, and the vast majority of people have been raised to treat people differently based on their perceived class. It’s for this reason that the opinions expressed in this blog post could invoke uncomfortable feelings in some people. But thanks to the internet, which is still in its infancy, this trend of the evolution of education is very likely to continue for the good of the majority of people. One might argue that there’s tremendous misinformation and noise on the internet, but this problem will continue to be solved over time.
From a sociological and psychological perspective, the difference between software developer and software engineer is mostly imaginary, but great lengths have been taken (by creating majestic structures and elaborate ceremonies) to make it feel tangible in the minds of the people. Mostly imaginary, because we’re still not at a point in human history where information is 100% free. The fact remains that traditional educational institutions conduct a great deal of research, and they are on the forefront of discoveries that push forward the boundaries of human knowledge. Today, it takes time for most of that information to be disseminated onto the internet. But over time, that loop will shrink, as it already has. Furthermore, it’s important to note that this loop (of information from research to internet) is smallest in computer science and software engineering. In other fields, or even within certain specializations of computer science and software engineering, the loop is much larger and traditional institutions of education remain critical to these professional pipelines of human resources.
Now, let’s explore from a technical point of view.
Software and Engineering
One could argue that engineers have a deeper understanding of the underlying mechanisms of the tools being used. Software is just layers of black boxes within black boxes connected to more black boxes, but an engineer might be expected to have a deeper understanding of the inner workings of those black boxes, as well as the interactions between them. That being said, it’s impossible for one person to understand every detail of every tool they use — that’s how expansive and developed software has become.
Software engineers are typically expected to have a broader scope of responsibility. This means they’re expected to have greater involvement in the design of a system, as well as how it interacts with other systems.
A software engineer might also be expected to have more understanding of the lifecycle of a product, from design, to testing, to release, and maintenance.
The latter two points of breadth and lifecycle depend heavily on interactions between other engineers and teams. This is where that concept of information asymmetry becomes so critical. What if your neighboring team isn’t giving you all the information you expect? Things can go wrong. In my experience, speaking as a self-taught engineer, the only negative customer impact my work has ever produced in my career came from poor collaboration with a neighboring team. This occurred in a very basic sense. I asked about deployments on their service in a specific environment, and never received an answer (in various channels), only to find that deployments have been broken for many months and fixing it (although very simple) is also impossible given my permissions. There are even more details to this incident that make me question it as a whole, but the point remains that one must be very careful during collaborations, especially if you’re in a position that might be viewed as outside some boundary. It’s important to note that simply carrying a degree doesn’t give you full access to information. Layers of inner-networks exist, just as they do in traditional institutions (e.g. fraternities, cliques). The only thing one can do is learn to navigate the potentially murky waters of collaboration using either of the following skills:
- Interpersonal and emotional intelligence.
- Obsessive due diligence of information received (or not received).
- Balancing this information asymmetry by providing information the other party doesn’t know and is grateful to learn.
The difference between software developer and software engineer is highly controversial. Many would say:
- There is no difference.
- The difference is in the scope of work.
- The difference is based on credentials.
This post leans towards the first two, with greater weight on the second. This post also explains why some might lean towards the third.
Sam Malayek works in Vancouver for Amazon Web Services, and uses this space to fill in a few gaps. Opinions are his own.