In Nebulab, we expect a software engineer to share the principles outlined in the General principlesplus more role-specific principles listed below.
Your Work
The characteristics of the software you design, write and test.
Embrace OSS Just as your team is a great resource, the same goes for the OSS community. Be kind to OpenSource. Prefer available libraries and software over re-writing your own even when you need to adapt a bit. At the end of the day the code in your private software will only be maintained by you and your team, OSS will be maintained by you, your team and the community.
Contribute with small, tested, incremental changes Whenever you’re contributing to software always work with small incremental changes that are easy to review. If you work in big chunks of code you will make the life harder for everyone in the team (and even future team members). If you do this right, you’ll be using something similar to Trunk Based Development. In addition to the above, to make changes easier to review and maintain in the long term, code should always be tested.
Build the story of the codebase with Git and PRs You should be a master at using Git. The main branch should be a linear list of commits that tell the story of how that software came to existence. You prefer using git and PR descriptions to document code and your PRs should be easy to follow through and review. You re-read a PR with the eyes of a reviewer before asking for a final review.
Write DRY, readable, beautiful codeYour code is readable and DRY enough that you could almost say it’s beautiful. You make it a personal thing to write code that is easy to understand and extend. You stick to project guidelines and respect team decisions on style and format.
Maintenance, refactoring and technical debt is everyone’s responsibilityYou feel responsible for the whole codebase and not only for the code you touch/develop. You practice opportunistic refactoring and help other people with their work when possible. Part of your day-to-day work is reviewing other people’s PRs on the project.
Code for the end userWhen you write code you’re always thinking about how it will be used in production. You constantly think about who will use your code and in what way it will impact their lives. If you’re working on a user interface you wonder if it will be usable enough to make your code be useful.
General Work Description
The software engineer is an individual contributor (IC) that works on computer science problems. In Nebulab they would design, implement and maintain complex applications, systems and services, typically in an eCommerce context.
The software engineer is classified as an IC role not because they work alone but because they contribute to a team but do not manage others.
As a software engineer seniority grows they’re generally responsible for more extensive parts of the application and they’re more capable of using their domain knowledge to implement better solutions.
Career
The software engineer’s career is pretty straightforward and, especially if they decide to stay on the IC track, they progress from one level to the other by consolidating knowledge, learning new things and widening their impact.
Whenever they reach the mid-level (IC3) a software engineer in Nebulab could try, in agreement with their manager, the management career starting as Associate Engineering Manager. This path is preferred for engineers that demonstrate exceptional soft skills and want to be more impactful by helping other people in the team.
For senior roles and upward (IC4) there is also the option of acting as a Tech Lead on a project. The Tech Lead is still an IC role that works closely with their manager but focuses on the technical nuances of a big software project. They are not expected to do people management (the manager will do that) but they’re expected to be handling most high-level designing and planning for the project.