Taro Logo

What are software engineering fundamentals?

Profile picture
Data Engineer at Financial Company5 months ago

Alex and Rahul and the other senior people on Taro have consistently emphasized how important good software engineering fundamentals are to long-term career success as a software engineer. This is in contrast to learning the latest popular framework or area of development. Can people define what those fundamentals are and how one should go about acquiring/improving them?

Thanks!

135 Likes
4.7K Views
4 Comments

Discussion

(4 comments)
  • Alex Chiou
    Robinhood, Meta, Course Hero, PayPal
    5 months ago

    The definition of a fundamental is a skill that will be useful anywhere you go. Fundamentals are really interesting as it's not binary either - Even among fundamentals, some are more broadly applicable than others (applying to your personal life as well!).

    There's a lot of fundamentals that a software engineer can pick up, and I'll split the categories up into separate comments as there's simply so much to cover. Let's start with my favorite one:

    Communication

    This is by far the most important fundamental IMHO as it is literally useful in every single context, both inside and outside of work. Communication is a massive area that takes almost everyone a while to get good at, but to start, you should watch my entire series about Effective Communication. Communication is also connected to many other "sub-fundamentals":

    79 Likes
  • Alex Chiou
    Robinhood, Meta, Course Hero, PayPal
    5 months ago

    Productivity

    Similar to communication, this can also be applied outside of work. The math is simple: If you are able to get more work done per unit of time than others, you are in a great position. To get better at this, I recommend our masterclass on effective time management in tech. Here are some "sub-fundamentals":

    • Having a strong flow state - The idea is that when you have a long uninterrupted period of time, you are exponentially faster. This is the state I got myself into in my later days at Meta and at Robinhood: ~75% of the code I wrote came on no-meeting Wednesdays.
    • Being good at context switching - When your calendar is peppered with meetings (i.e. most senior+ engineers), it's very powerful if you're able to get something concrete done in those 15-30 minute blocks. Here's my advice on how to get better at this.
    • Meeting management - This boils down to 2 things: Not going to meetings that aren't very useful to you and concentrating similar meetings on certain days to give you more focus blocks. For the first part, I'm surprised nobody has asked about how to evaluate the usefulness of a meeting yet, so I don't have a direct resource handy unfortunately. To substitute, I recommend this video on the #1 concept to remember with meetings.
    59 Likes
  • Alex Chiou
    Robinhood, Meta, Course Hero, PayPal
    5 months ago

    Quality

    This one is more specific to software engineering, and I recommend this Q&A from a Meta engineer as a starter resource to learn more about it. Here's the "sub-fundamentals" for it:

    • Having a nose for edge-cases - I owe a huge amount of my career success to this: One of the best examples is when my attention to detail allowed me to catch a multi-million $$$ bug at Instagram, which was a large part of my promotion to E5 (senior engineer). There are many ways to build up this sense including talking to your friendly local QA engineer, dogfooding your own product, taking some time to think proactively before starting a task but my main piece of advice is to not be afraid and test diligently outside of the happy flow. I have seen so many developers write code, deploy it, timidly test only the happy flow, and submit the PR - The code's going to blow up eventually; it's not healthy to ignore the messier cases.
    • Understanding users through data - This is something that I really learned at Meta, and I'm glad I did so. Even early-stage startups (like Taro!) have analytics; it's the main way to understand whether your users love your product at scale. And once you understand your users, you can truly make the product better for them. To learn more about this, I recommend this Q&A around how to become an analytics lead.
    65 Likes
  • Seed Zeng
    Staff Software Engineer @ DoorDash, ex-FB, ex-Klaviyo
    5 months ago

    I will add one more

    Compassion

    The ability to Sympathize with others and understand where they are coming from becomes increasingly important as you progress in your career

    • Use compassion to understand the need of your teammates

      • Know them not just in work settings but take your time to understand their interest, passion and career goals.
      • This gives you an edge when collaborating with them since you know "what drives them".
    • Use compassion to understand the priorities of your managers/directors

      • Managers (especially frontline ones) have a hard job. They are basically sitting in meetings and have to deal with all the distractions. Sympathize with that and see how you can make their jobs easier.
      • This gives you an edge to really understand what are the most important things for you to deliver.
    • Use compassion to understand the priorities of other teams

      • Things that are important to you and your team might not be a priority for others. Dig in and understand what their priorities are and see how you might be able to help
      • This gives you an edge to achieve alignment when there is a conflict.
    37 Likes