As a full stack software engineer, I have worked under various different operations paradigms: Developers fully own infrastructure and deployment. There is no dedicated operations team. An operations team manages infrastructure and deployment. Developers cannot touch any of it. An operations team provides a set of tools and procedures to allow developers to manage infrastructure and deployments.…
There have been a lot of stories recently about compromised libraries, especially in the JavaScript ecosystem. This problem is exacerbated by the fact that JavaScript projects commonly have hundreds or even thousands of direct and transitive dependencies. Fortunately, there is a pretty good and reasonable mitigation for this issue: setting the minimum release age for dependencies. Some dependency…
I have recently been reflecting on the fact that a lot of the best engineering work I have done would not be considered particularly interesting or innovative. By best engineering, I mean the work I have done that has been most valuable to my organization. This is important to mention because a lot of people conflate technically interesting or innovative things with good engineering. These can be…
Software engineering is hard. Sometimes it feels like a herculean effort just to ship something that works. One of the biggest mistakes I see engineers of all levels make is stopping development work once their feature is done. This is a mistake because it's typically not only our job to produce working software. We also have to maintain it. This means working code isn't enough! We should also…
Generative AI is everywhere. One of the more interesting and provocative uses of AI in the software industry is for code generation. Tools like Cursor and GitHub Copilot are making huge waves with people going as far as to speculate about AI replacing software developers. I don't really believe that's happening anytime soon; however, I do think there is a growing expectation that software…
There's a word that always comes up in career discussions and promotions at large engineering organizations: impact. When you're earlier in your career, expected impact is often easy to define: you're given tasks to complete over a period of time. If you complete those tasks in a timely fashion and your work is good quality, you've made the expected impact. But what about when you're more senior?…
Recently, I have been a lot more active on Bluesky . I'm really enjoying it for a few reasons: It uses a promising distributed social network model—landing somewhere between full federation (e.g., Mastodon) and monolith (e.g., X). Check out AT Protocol docs if you're interested in learning more about the protocol. It uses a neat domain-based handle verifications system (my handle is…
In my inaugural 2025 blog post, I mentioned I wanted to write more about product-minded engineering. This is true, and I have a lot of opinions I have formed based on my own experiences. But also I recognize there's a good bit of existing knowledge out there that I should consume to further my understanding. In this post, I'll attempt to assemble a reading list. This list will probably evolve over…
Another year in the books, wow! Per the tradition I started one year ago, I'm going to reflect a bit on the past year and make some goals for the upcoming one. Personal # Another big year for me personally: my son was born! I now have an amazing four year old daughter and a wonderful (if inconsistently sleeping) eight month old. The family feels complete! I am, of course, exhausted. I typically…
I have been thinking a lot about what traits and skills have served me well in my career. In this article, I'd like to highlight some of the non-technical skills that have served me well. Finding the value in my work # I generally need to feel invested in my work to do well. This means I need to find some sort of value in it. I was lucky to have spent a good amount of time in civic tech where the…
2023 was quite the year for generative AI and, specifically, large language models (LLMs). With all the discourse on generative AI came a familiar reprise: “is this the technology that will replace software developers?” On the face of it, I totally understand. If you open ChatGPT and give it the prompt, “Write an adder function in typescript” it will dutifully generate the following code: function…
Does this look familiar? // TODO: xxx Git blame: John Doe (6 years ago) It does to me. That’s because I’ve almost never written (or seen) a TODO in code that actually gets done unless there is an associated ticket . Why would an in-code TODO actually get done? The next time someone sees it, they’ll almost certainly be working on another task. If it was too challenging to take care of right now,…
Over the past several months, I have been leading a UI engineering team at work on a large product area. It has been going well, but I have also been experiencing more stress and burnout than I probably should. I decided it would be a good idea to do a more formal exploration of technical leadership. I found some great resources: I’m making my way through staffeng.com , joined Rands Leadership…
Every workplace I’ve been has had some sort of convention for nitpick PR comments. ConventionalComments.org defines nitpicks as "trivial preference-based requests" that are "non-blocking by nature." There are a few problems I have run into with nitpicks. If something is truly trivial or preference-based, a developer probably should not change it. A trivial issue should have little-to-no business…
If you’re anything like me, you like to understand the best way to accomplish software development tasks. But “best” is a loaded word: it implies there is a true and perfect way to do things. For organizations, best sounds big, risky, and time-consuming. Best practices are often generalized truisms. They sound something like “implement the testing pyramid ” or “use CI/CD .” They’re great big…
2023 was a good year for me, both personally and professionally. I have a toddler and she is awesome. She’s gotten really good at talking, started preschool, and learned to use the potty. I love spending time with her. I completed my first year at Microsoft. My team successfully brought an acquisition to general availability , which was a huge win. I helped implement a bunch of developer…
I’m skeptical of low-code. When I was doing some software consulting, I would get clients who had been drawn to low-code all the time for the promise of fast development time and low maintenance cost. The client ended up not being happy for one of a few reasons: They wanted truly custom functionality that the low-code solution could not handle. A lot of low-code solutions seem to hit about 80% of…
Humans write buggy software. However, bugs are bad for business, so in an effort to reduce the quantity and severity of bugs users encounter, software and Quality Assurance (QA) engineers test their software. Finding bugs during software testing is thought to be beneficial for several reasons: Customers are happier when software works better. Happy customers are better for business. On-call…