Software Engineer


A Software Engineer is usually able to operate independently for a small to medium sized feature. In many companies, this usually means the engineer is confident in owning and maintaining a single system.

How to get there


At this point, it is more important for you to be very good at one thing (backend, frontend, devops, etc.) Pick one and focus on understanding how to build something end-to-end in your area of specialization. At work, you will usually collaborate with other engineers in a different specialization to fulfill a feature.

Feature development

In your area of specialization, learn how to integrate different components to fulfill a small to medium sized feature. For the frontend, this might mean learning how to wire many UI components together to form a page. For the backend, this might mean learning how to wire many controllers / services to make an API.

You should be able to practice some of the Clean Code principles in the code you write:

Quite often, you will refactor old code to fit your new features. Learn how to Perform Refactoring Effectively.

Design Patterns

Start getting familiar with when to use Functional Programming vs Object-Oriented Programming.

In a nutshell, FP is great when:

  • Your program works like a pipeline. A's output becomes B's input. B's output becomes C's input.
  • You are working with compilers
  • Your program is mostly parsing and transforming data, with limited IO

FP is based on a lot of mathematics. If you are not confident, stick with OOP first and try out FP with Haskell for some side projects.


Apart from Mastering unit tests, you should also know how to write an Integration test to check whether your feature will work after assembling many components.

Problem solving

Figure out how to unblock yourself whenever you are stuck. This would mean getting better at finding answers to problems in:

  • google
  • stackoverflow
  • github
  • blogs / articles

Don't be afraid to ask questions to your seniors and accept their guidance.

When you need to debug code, follow this standard practice:

  1. Reproduce the bug. If you can't reproduce the bug, then you don't understand the problem.
  2. Build a minimal test case that reproduce the bug.
  3. Formulate your hypotheses.
  4. Test your hypotheses and iterate until the test case passes.

More ideas in this post about How to get better at Debugging Code.

Soft skills

It is important to be very open-minded and curious. Software Engineering is a deep and wide career. The longer you stay in this career, the more things you need to learn.

As you are working on larger and larger features, you would usually be working with more people. You might find yourself disagreeing with a Senior Software Engineer in your team who is giving you advice. Learn how to Disagree effectively with a more experienced engineer.

Read this book called Team Geek as it has a lot of tips about how to play well with others in your team.

Your Reading List for this page