You keep hearing about those startup founders and mobile app developers that became overnight millionaires. These big hits make the software engineering career path look exciting but you don’t know if it will work for you and what is the reality of the job.
In this post I want to help you figure out if you will enjoy a career as a software engineer. I will talk about the money, what we do all day and how you can get started to see if you will like it before you sign up for that 4 years degree :).
My name is Yohan and I am a Staff Software Engineer at Google Singapore. I am currently leading the technical direction on some of Google big products in charge of 250M+ users.
I have been at Google for the last 5 years, all the while on the interview panel for senior engineers as well as on the hiring committee for Google software internships in Singapore.
Before Google I spent 10 years in startups as a co-founder or early employee, often in charge of growing our technical teams while building our technical infrastructure and startup products.
I have lived and worked as a software engineer in Europe, US and Asia. I understand the questions you have, I also understand what companies are looking for and what a lot of software engineers do all day :).
With that said, let’s get started!
Show me the Money
That’s usually the first question I get: “how much do you make”, “do software engineers earn a lot”, etc.
The quick answer is: it depends on where you live BUT generally speaking in Europe (France, UK, Germany), US and Asia (Singapore, China, India), there is a growing recognition and appreciation for talented software engineers and a global shortage of engineers compared to the number of companies that want stuff built.
That leads to an increase in salaries often complemented with other kinds of compensation like company stocks and perks. Software engineering is typically on the higher pay bracket for the country, especially when you reach senior level after 5-7 years on the job where the non-cash compensation portion increases significantly.
So all in all, you will not go hungry and might become a millionaire or at least financially comfortable if you stick to it long enough :)
What we do all day
One of the biggest myths I hear is that software engineers are geeks sitting in front of their computer all day furiously typing cryptic language into the computer.
Firstly, with everything digital, almost all white collar jobs now require sitting in front of the computer to get their work done: artists, marketing, finance, HR, etc. all these jobs have a significant portion of their time that require doing things through their computers. Nowadays with covid19 it is even more true with everyone forced to collaborate remotely, doing everything online.
For software engineers, in reality, the days where we can sit in front of the computer furiously writing code for 8 hours straight are few and far between. Especially as you reach more senior levels. The reason is that it’s really hard to build something impactful or significant with just a single person. So collaborating with other people is key: meetings, brainstorming sessions, writing design documents, design and code reviews, ensuring everyone is aligned on what we are building and why and general communication (email, presentations, sharing sessions and other talks) are key aspects of the job. That also includes communicating ideas, expectations and issues with non-engineers (graphic designers, marketing, leadership, sales and customer support team, etc).
Most people overlook those aspects when they sign up and think their life will be 100% coding. But being able to master those will take you much further as you will become a valuable member of a team building bigger things rather than a lone wolf.
We are not paid per Line of code
Contrary to popular belief, our job is not to write code. Our job is to build and launch products or features for the products. And ultimately these products are supposed to directly or indirectly make money for the business that we work for. You never get paid per Line of Code that you write.
The Engineering part of our job scope encompasses multiple aspects:
First and obvious one is Programming:
We must translate ideas into code to build new features and product
We need to fix the inevitable bugs
We need to clean-up older code, bringing to new standard, or preparing the code for a bigger feature that is coming up
We need to write automated tests for the code to feel safer that the new code we write doesn’t break the previous stuff
We need to set-up or even build infrastructure and tools to enable us to build and ship more features more efficiently.
We also need to manage code changes more generally by reviewing code written by others, looking at the history of who wrote what code and figuring out where bugs were introduced and how to revert back to an earlier version.
Besides programming, a big part of our role is around actually releasing those features to the users: that includes coordinating testing efforts with actual humans (the Quality Assurance teams); also experimenting with various ways of presenting the information to users to see which ones are the most effective. That also covers the feedback loop with end-users: what they like/don’t like, bugs and crashes, fixing them, testing the fix and releasing updates and patches. Rinse and repeat.
We also spend a large amount of effort on collaboration with others as mentioned previously: seeking alignment on what needs to be built or how it should be built. Most engineers are often involved in management of projects and deadlines (when projects should be completed): that requires breaking down the problem in granular chunks, estimating how long they should take and who should build them and how long it would take to put everything together into the final product. And if you are working as part of the team project, you would need to collaborate closely with the other engineers since some of them might be waiting on your piece to be completed before they can make progress on theirs. You might also need to collaborate with external partners to launch your stuff. (ex phone manufacturers or car companies) to build some custom projects for their specific needs.
And finally we spend a lot of time mentoring people that are less experienced, that also includes conducting interviews to hire more people into the team (from internal transfers or external hires and interns) and helping those new people quickly become an effective member on the team.
There are more tasks we do depending on the project, product and industry of course and I glossed over a lot of the details on purpose or it would take a much longer video to cover them all. But hopefully that gives you a rough idea of what we do on a daily basis.
How can you tell if you will like Software Engineering as a career?
I came up with a small starter project that should not take more than a couple of weekends but it encompasses a lot of the parts of the job. Here is what you need to do:
Your job is to create an Android App, that you can install on a real device (or iOS app if you have them). The App should only have one screen with a button in the middle.
When you press the button it should say “Hello my name is X” (use your own name). I am talking about actually playing audio that you pre-recorded.
The app should run on an actual device. And you should submit your code on Github.
Why this project and what you will learn by doing so?
You will learn how to figure out what kind of development tools you need to achieve the goal and how to install and set up those tools so you can start programming. We call this our development environment.
You will learn source code management, which is an essential tool used by all software engineers out there to ensure we can see the history of modifications to our code.
You will learn how to start from a template project (or existing code) and how to add your own feature to it.
You will learn audio recording (could be useful) and how to add external assets to your project (audio, images, etc).
You will learn how to actually translate ideas into code.
And finally, since it’s running on a device, you will be able to show it to your friends and you will learn the harsh reality of showing products to people that don’t understand technical complexity, how hard it was to get that thing built :)
Hopefully you can try that one out. If you don’t like the idea, feel free to come up with your own, any starter project will do as long as the scope is really small and can be accomplished within a couple of week ends. But it should encompass the key concepts above of source code management, development environment and one piece of non-obvious code path.
I’m hoping this post nudged you a bit towards this career path. I personally believe this is a great career to be in with a lot of growth potential and opportunities worldwide to work on very exciting projects. You can even start your own projects or startup around your very own ideas and hopefully make it big yourself.
This ability to work from anywhere or for any company is very unique to the software engineering profession. And as the world is increasingly shifting towards everything digital and mobile, most companies need help with bringing their products and services online, digitizing their infrastructure or inventing completely new ways of doing things using new technologies.
Let me know in the comments below whether this content helped you. And don’t hesitate to share your thoughts or questions.
As usual I have also published a video with the same content if you prefer that format.