Daily journal: #1
Load testing, empathy as a mentor, and thoughts on churn of frontend ecosystem versus slower moving, less innovative backend technology.
Friday, July 29, 2022
Things I've learned
Load tests are designed to intentionally pushing your service to see how it handles intense traffic.
My colleague gave a fantastic presentation on setting up load testing for our service and I was thrilled to see our service could handle many magnitudes higher than we receive on a regular basis.
The idea behind a load test is to incrementally ramp up synthetic traffic and see how your service handles it. You'll get insights into what your maximum traffic is, how it handles too much traffic - does it ail gracefully or crash and burn - and help you understand how to improve your application's performance.
Load tests are ideally run from serverless infrastructure that can scale up to an arbitrarily high amount of requests to simulate huge peaks of traffic. And you'll want to run these sparingly since they can be expensive to run on a regular basis. I also suggest running these in a non-production environment, especially until you know your limits and you're confident that the tests won't break your service.
Things to improve
As a mentor, I really need to focus most of my efforts on empathy before setting expectations.
For example, I recently finished coaching an amazing intern for the last 12 weeks. He's a sophomore in college at Rice University, had a little experience programming in Java, and was excited to join our Privacy team during the summer to help us improve our privacy consent experience.
When he first started, I made some assumptions that he knew things I take for granted, like how sprints work, how to ask questions effectively in a team chat, and how to ask for help early and often without fear. This was a big mistake. How would he know this fresh out of his second year in college, at his first professional software engineering job? I deal with imposter syndrome to this day, but how much worse was it when I was at my first job and trying to make a great impression?
At this point I was meeting with him on a weekly cadence and found that he was making decent progress, but I had to make a large effort to pull information out like how the project was going, what he was struggling on, how I can support, etc. It wasn't enough support from my side, and I was failing him as a mentor.
I then set up a daily sync for 30 minutes, making sure I had time afterwards in case we went over time. Almost overnight things changed: we dove deep into all sorts of topics that he was confused about like how the tooling worked, how sprints are handled, where to look for answers (this is probably 90% of your job as a software engineer - thanks Stack Overflow and GitHub!), and more. The asks were pouring out of him, I was thrilled!
Fast forward 10 more weeks with the daily cadence and we're now wrapping up a successful internship and extending an offer for him to return for another internship next year.
It's obvious in hindsight that I was lacking empathy of how it felt to start day one of your professional career. When you've been in tech for about 9 years, it's a challenge to remember how it was in the beginning sometimes. But I'm blessed to have had the opportunity to learn from him as much as he hopefully learned from me. I'm looking forward to more opportunities like this in the future.
Random thoughts
I'm curious if backend frameworks and languages are evolving as quickly as frontend ones.
I'm a full stack engineer, but my expertise lies in the frontend. From my mental model, it seems like backend technology is much more cautious to try new things as frontend technology.
I fully understand that there are tradeoffs with the churn and overwhelm that comes with having so many choices for how to build a UI, and it feeling like as soon as you learn something there's a new framework that's all the rage. Slow and steady is easier on the mind for sure, and stability is key for backend systems. But it is a bit painful to work on the backend from my experience: not very much documentation on template languages like JSP, and when you do find documentation the styling is very hard to read. It's written more for computers or academic researchers than a web developer in my opinion.
This may be a flame war topic, and maybe it's just a Java thing, but I definitely miss my React/Apollo GraphQL, etc. documentation when I'm looking up how to do X in Java.
Happy coding! SL