Having recently graduated with a degree in Computer Science and started working as a software engineer, I have found myself receiving a deluge of questions from friends, family, even random people in the streets.
Among being asked to fix printers or getting solicitations for free coding work, one of the most common questions I receive is “What do software engineers even do?” Despite software engineering being one of the fastest growing careers, the skills and responsibilities of one doesn’t seem to be common knowledge, even amongst those interested in becoming one.
So what does a software engineer do?
In my experience, the most common misconception I see about being a software engineer is that it’s just writing code. While coding is undeniably a large part of being an engineer, there are many more skills expected from successful software engineers. In many ways, being a “good software engineer” is being a good computer scientist with strong interpersonal skills.
First, software engineers have to have strong computer science hard skills. One of the beauties of modern coding languages is how abstracted they are, meaning that not that much technical knowledge is needed to write code. However, for long-term, large-scale projects, concerns such as performance, extensibility, and security issues and compliance become major priorities, with the solutions requiring deeper knowledge beyond the code layer.
Then, software engineers also need interpersonal soft skills. I would wager that the vast majority of software engineers work in teams, meaning that clear and effective communication is essential to creating a productive work environment. This includes collaborating on design decisions, pairing with teammates to work on code, and timeline planning.
Then on a very basic level, it doesn’t matter how technically good you are if no one wants to work with you. As a result, most top technical companies—including Lucid—heavily weigh personality into the interview process and hiring decisions.
For some more specific examples, let’s look at how Lucid’s four core values translate into skills necessary for day-to-day work.
Teamwork over ego
A big part of a software engineer’s job is being able to work in a collaborative environment, spending a considerable amount of the day engaging with team members and other teams.
For instance, the majority of software companies use a code review system before allowing an engineer’s code to be integrated into the main codebase. Engineers have to be able to read other people’s code changes, identify any potential areas for improvement, and give constructive criticism. Then, on the flipside, setting aside personal ego to accept and act upon constructive criticism.
As another example, we have a large library of internal documentation and articles at Lucid that can answer nearly any question about our codebase, much of which was voluntarily authored by engineers simply because they wanted to provide helpful resources to their co-workers. Also, many engineers choose to monitor company chats to answer any questions that may arise in their areas of expertise. In other words, Lucid engineers have a culture of teamwork and wanting to help one another even when not asked to.
Innovation in everything we do
In order to stay competitive and provide the best possible experience to our customers, we strive to be innovative throughout our products, from refining details in our existing suite to creating solutions to problems our clients didn’t even know they had. As a result, at Lucid, we believe in a culture of continued education, where numerous educational opportunities are offered to its employees.
For engineers, some such offerings include weekly tech talks, which serve to draw attention to and train engineers on features in our code base. We have online training courses to explain the basics of common tools and practices used at Lucid, as well as cohort-based programs that are tailored towards teaching essential skills specific to Lucid to prepare engineers to be successful at whatever tenure. All ensuring that each engineer has the resources to learn new skills to keep innovating.
Individual empowerment, initiative, and ownership
At Lucid, every single employee is encouraged to champion their own work to make a positive impact on the company. From day one, engineers at Lucid are asked what they would like to work on, making task distribution a collaborative process rather than having work dictated to them. This keeps work engaging, but also means that all developers have to be actively engaged in planning. We have to think about and plan out logical next steps for in-progress projects and engage in conversations to find what to work on next.
Engineers are also given the opportunity to work on individual ownership projects that might not necessarily fall under the purview of their team, primarily during the annual Hackathon and fifty-percent Fridays, a weekly opportunity to take half a day to work on whatever you’d like. Either way, engineers are encouraged to see what improvements they would like to see — be it product features, quality of workflow improvements, etc. — and are allocated time from the normal workday to make said improvements. Many prominent features in our products originated as ownership work that grew in scale and eventually took on its own life.
Passion and excellence in every area
During discussions on how to solve problems, our team is rarely satisfied with “good enough.” Instead, we strive to methodically think through every detail to find the best possible solution from multiple perspectives — speed, user experience, extensibility, long-term support, etc. — while carefully considering the fact that most problems have numerous possible solutions, with each having benefits over each other.
As a result, our engineers are expected to actively engage with common computer science topics and apply them in practice. For instance, performance improvements often require algorithmic solutions that are first made in abstract terms, then translated into code. We also need to be able to analyze and compare different algorithms, weighing their pros and cons from both a technological and human perspective.
Being a software engineer is a complex (and ultimately rewarding) career that requires a diverse set of skills. Besides being able to code, software engineers need to have a deep understanding of essential computer science principles, as well as strong interpersonal skills to foster a collaborative environment.