My dad works in construction/home renovation and is a jack of all trades. The work he does is physically demanding and takes a lot of hard work and energy. So, when he comes home and sees me sitting in my chair at my desk, he always needs to make a joke or two. That being said, my reply to Facebook’s went like this:
In his eyes, a software engineer is someone who sits in front of a screen all day on a comfy chair in an office or their own home. It doesn’t look like we do much work at all but software engineering is more like an iceberg where you can only see about 1% of the actual work we do. At a glance, it isn’t easy to see and understand the work we do, especially when compared to renovating an entire floor or bathroom.
And there it is… the question that made me wonder what software engineering really is. Software engineering in general is an extremely broad topic, and as a full stack engineer there are many different areas I work in. How could I sum it up for someone who doesn’t have a good understanding of what technology is?
So the million dollar question is “how would you explain software engineering to him?”
Let’s try to break it down through a simple story.
The story of you and an unexpected visitor
Imagine that an alien has come to visit you but they know nothing about the world as everything is foreign and new to them. The alien is just like a computer, where both an alien and a computer doesn’t know how to do anything “out of the box” until they are instructed to do things.
It’s your job to teach this alien how to act like a human and blend into our society. You are playing the role of a software engineer where our job is to teach computers to do specific tasks by writing explicit instructions. In this case, the “specific task” is to make the alien seem like a human.
The initial lesson
To aid you in your teaching, you utilize Google translate to communicate with the alien in a language only they understand. You start by telling the alien that you can walk on the sidewalk, you can eat but chew with your mouth closed, etc (our explicit instructions to the alien). Now this alien acts just like how you taught them to and you send them off into the world.
This is just like when a software engineer (or more likely an entire team) builds out a new feature (maybe a chat feature to talk to other people via text). Once it’s made, it gets “shipped” (or sent out) to their users.
Getting feedback on the alien’s performance
You give the alien your business card (in case they need help) and they hop into their UFO and head to Japan. Wow, you feel great! You taught this alien how to act like a person and the alien is able to safely cross streets and politely eat food! All is well until you get a call from a Japanese local.
“Hi, the alien you trained is not being very polite.” (translated for both of our benefits). The only thing that could be impolite is chewing with their mouth open and you know that isn’t possible because the alien follows instructions to a tee. But then the local tells you that the alien has been walking around and eating at the same time and that is impolite in Japanese culture. Darn, you didn’t even consider teaching the alien how to act in a different cultures! Good thing you gave the alien your business card so now people can give you feedback. So what do you do now? You ask the local to tell the alien to come back so you can give them a few more lessons.
This is similar to users reporting bugs on the new chat feature. Maybe messages are loading out of order? At this point you know something is wrong so we have to go and fix it.
A minor update
As the alien is on the way back, you start to do your research and even invite some locals from a bunch of different countries to share their knowledge on their cultures and acceptable etiquette. Together, you talk about things that are good and bad. You find general rules that apply to general cultures and come up with a series of lessons together. Each of the locals decide to teach a lesson (with Google being the translator of course) on their cultures for the alien.
Now the alien has come back and is acting much better than before. Sure, the alien isn’t able to speak with anyone but at least the alien isn’t acting rude. The alien then leaves to go to another part of the world.
This is one of the jobs of a software engineer. We investigate the problems that our users tell us about and try to figure out how to fix it. Sometimes it’s an easy 5 minute fix but usually it takes a lot of brainstorming and teamwork to come up with the best or most acceptable/reasonable solution.
A request to level up the alien’s abilities
Some time later, you see the alien has been featured on the news and find out they’re doing great! They are doing everything exactly as they was taught to do: walking on the sidewalks, eating (in private), etc. The alien is now dubbed the friendly neighbourhood alien as they roam around different neighbourhoods and greet the locals. You’re so happy for the alien and then one day you get a call again, from Italy this time, about the alien.
“Hi, this alien is so cool! I would love it if the alien could speak Italian. Then I can greet them and ask them a lot of different things.” Then you get this brilliant idea: what if you could teach the alien all the major languages in the world? It would open up a whole new world of possibilities for the alien’s future. You then ask this Italian individual to tell the alien to come back to you.
This is similar to your users asking for more stuff from the chat feature we originally shipped. Maybe they want a new group chat feature to talk to multiple friends at once. All in all, this will require a lot of improvement to the existing feature.
A major update
You have a big task in front of you, one that goes well beyond your realm of knowledge. You call language professors from your local universities and create a team of qualified individuals to teach the alien how to speak in many different languages.
Because there is so much to cover, each of the professors will take turns teaching the alien their language of choice. They also brainstorm what the most important things to teach the alien are. Each professor creates lessons and has the opportunity to teach the alien and some time later the alien is good enough to have simple conversation. The alien then goes back out and shows the world their new skills.
This is the other job of software engineers. We build things our users want and the more popular things get built out first. We get together in teams (or sometimes create new ones) and start to plan out how we want to build it. Then we assign certain parts of the feature to individual engineers to build out themselves. Finally, when it’s ready we can then ship it to our users through a software update.
What comes next
The alien is out in the world and is doing everything they were told. They’re a good alien who is polite and brings joy to locals all over the world. You still get calls from strangers with comments on the alien’s performance and requests to teach the alien to do chores or stuff like that. With the feedback your users gave you, you create a dedicated team of volunteers to create lessons to help the alien learn all sorts of things to continuously make the alien better.
Similarly, this is how we scale our engineering teams to work on different feature requests or fix bugs. We want to make something that every single one of our users find useful so we end up building multiple features at the same time through different teams.
So what is software engineering really? Is it teaching aliens how to act like humans? Not at all.
Software engineering, in a nutshell, is working with a team of people to teach computers or machines how to act. We can teach cars to drive just like drivers or get computers to do our taxes just like accountants. Our decisions are guided by feedback from the people who use our applications and want to see it grow.
Lots of people think that all we do is code. It is true that we do code a lot, but thats similar to saying all mail carriers do is walk. Coding is simply a medium for doing our job, just like how mail carriers need to walk to deliver mail from house to house. We like to solve problems and coding is just a way for us to do it.