1

How do I improve at building systems?

Profile picture
Entry-Level Software Engineer [IC1] at Nvidia2 years ago

I work on a product that runs on a variety of architectures, with code split across many GitHub repositories. We have a complicated build process. When making changes, I often struggle to find a way to run those changes efficiently (i.e. outside of the CI process). This is made worse when I need to make changes that also change the build process or need to run debugging tools like GDB.

When I onboarded, I was told that everyone has their own setup by people who've been on the team since its inception. It seems like people newer than myself have figured it out, even with how messy and changing everything is. However, I've been here for over a year and the team tends to work quite independently. Occasionally, folks will be quite helpful for a point or two, but generally everyone's stretched a bit thin and tends to focus on their tickets. My manager has also rebuffed any requests for collaboration or mentorship since I started, saying that I'm expected to be independent to show I'm ready for the next level. He did say I could that I could try to change the team's culture to be more collaborative if I wanted to take initiative, but that's not what's expected of a software engineer, especially if I want to do well and get promoted.

This question may be more about how to correctly get answers answered when you're no longer new, but I also feel that building (CMake, Docker, environment setup, package management, etc.) is slowing me down. Are there good processes for getting more efficient at building components/systems and unblocking yourself faster?

111
3

Discussion

(3 comments)
  • 2
    Profile picture
    Robinhood, Meta, Course Hero, PayPal
    2 years ago

    My first thought is to lead by example. Changing culture is hard, and it's not reasonable to come in and ask people to change the ways they're so used to (in your team's case, it's changing from a more "lone wolf" style to a more collaborative one).

    In your scenario, you mentioned everyone has their own setup to build stuff.

    • I assume this means that everyone has their own little tricks to make things smoother (shell scripts, IDE hotkey combos, etc).
    • I imagine if you took the "union" of all those tricks, you would become super efficient.
    • To start the process of getting others to share their setup, simply start sharing the most positive aspects of your own.
    • Let's say that you have some personal bash script you wrote to make a build step 10% faster - Just post it within your team, attach some proof of its value, and hope your teammates use it. Worst case, you spent some minutes on sharing, but the best case is that your teammates start using that script (impact) and are inspired to share their productivity hacks (even more impact).
  • 2
    Profile picture
    Robinhood, Meta, Course Hero, PayPal
    2 years ago

    but I also feel that building (CMake, Docker, environment setup, package management, etc.) is slowing me down

    This is a classic big company thing - It was especially bad for me back at PayPal.

    As a junior engineer, it will be very difficult to make these processes faster, so I recommend trying to "hack it" by finding something to do while these run. If the fresh build takes a long time, maybe you can start every morning with a rebase + fresh build and then use that time to review PRs? This sets you up to be more productive the rest of the day and enforces a healthy habit of doing code review daily.

  • 1
    Profile picture
    Entry-Level Software Engineer [IC1] [OP]
    Nvidia
    2 years ago

    Thanks, Alex! I really appreciate you thinking through this question and providing guidance.

    I'll try to find ways to share productivity tips with my team and lead by example. That's a great idea to get the fresh build done each morning (or, if needed later in the day, to try to schedule other tasks for the initial build). Thanks again!

Nvidia Corporation is a software and fabless company which designs graphics processing units (GPUs), APIs for data science and high-performance computing, and a system on a chip units (SoCs) for the mobile and automotive market.
Nvidia3 questions