Human Who Codes Newsletter - Getting Stuff Done


Thoughts on Getting Stuff Done

One of this newsletter's main themes is the importance of the non-coding side of software engineering. Sure, knowing how to program gets you through the door with an entry-level job, but that skill alone only takes you so far—maybe to senior software engineer. Beyond that, you need to grow in areas like leadership, communication, and negotiation. CTOs and chief architects don’t spend their days buried in code; they get there by proving they can do one thing really well: get stuff done

Getting stuff done takes many forms. Sometimes, it means writing code. Other times, it’s meeting with customers to understand their needs or coordinating efforts across teams. As you move up the individual contributor track, a smaller percentage of your work involves actually coding. There are countless ways to get things done beyond just programming.

The uncertainty around AI in software engineering is understandable. Every week, new large language models (LLMs) seem to improve their coding abilities. Now, you can ask an LLM to create an application from scratch and it works, no human intervention needed. Naturally, that raises concerns about the future of the profession. Are software engineers just waiting to be replaced?

Technology keeps evolving, and it almost always makes our job as software engineers easier. Early in my career, no one wrote tests because there weren’t many testing frameworks available. In 2008, I created one of the first JavaScript testing frameworks. Later, in 2013, I introduced ESLint. These tools helped reduce errors and boosted developer productivity. Modern code editors and IDEs, with their shortcuts and built-in enhancers, are another example. LLMs are just the next generation of tools to improve our productivity. Use them to get stuff done rather than fear them.

LLMs will inevitably replace some software engineers. There’s a whole group of developers who struggle to get their code working. These engineers have found jobs in the past because companies needed more people to meet their coding demands. Unfortunately, LLMs have already proven to be better at writing workable code, putting those engineers at risk of being replaced.

The software engineers who won’t be replaced are the ones who focus on delivering results. Create value for your company, ship products, and delight customers. No matter how technology evolves, this remains the path to success for software engineers.

Key Takeaways

  • Advancing beyond a senior software engineer requires honing leadership, communication, and negotiation skills. Success is about delivering value and getting things done—often outside of just writing code.
  • From testing frameworks to LLMs, new tools continually improve productivity. Instead of fearing obsolescence, software engineers should leverage these advancements to stay ahead.
  • Engineers who prioritize creating value for their company and customers, shipping quality products, and adapting to new tools are less likely to be replaced in an evolving industry.

Understanding JavaScript Promises

I just updated my e-book, Understanding JavaScript Promises, for 2024! It now includes information about Promise.withResolvers() and a whole new chapter on using and creating abortable functions.


Stuff I've Enjoyed this Month

📝 Reproducibility vs. Provenance: Trusting the JavaScript Supply Chain by Darcy Clarke
GitHub and npm have been pushing the idea of package provenance to help secure JavaScript packages against malicious actors. This post argues that provenance is not enough and that reproducibility is a safer approach. (Note: the tool mentioned in the article did not work at the time of my writing.)

🎬 A 10x Faster TypeScript by Microsoft Developer
It was hard to go online in the past month with seeing something about TypeScript being rewritten in Go. In this video, lead architect Anders Hejlsberg explains the thought and decision-making process surrounding this change.

📖 What Got You Here Won't Get You There by Marshall Goldsmith and Mark Reiter
Software engineers can find advancing in their career difficult primarily because the skills that made them successful initially aren't the ones they need later on. This book is all about this phenomenon and explains the changes people need to make as they move in positions of authority in an organization.

📝 Human-readable date formatting with vanilla JavaScript by Henry Desroches
Formatting dates in JavaScript used to be difficult, but no longer! This fast read shows you a bunch of different ways to quickly format dates in JavaScript without using any external libraries.

🎬 Large language models deeply explained by 3Blue1Brown
This is a great, succinct video explaining how large language models work. If you're still confused about LLMs and haven't had the time to read through academic papers or sit through hours-long lectures, this is the video you're looking for.

📝 Rust and JavaScript plugins by Marvin Hagemeister
Deno recently released a plugin system for its linter based on ESLint rules. To do that, they have to figure out how to work around the serialization/deserialization cost of passing data between Rust and JavaScript. This post explains how rethinking the AST led to some significant performance improvements.

🎬 RAG vs. Fine Tuning by IBM Technology
Another excellent short video about AI. This time, the topic is about customizing a LLM in two ways: Retrieval-augmented generation and fine tuning. This video discusses what each approach means and the associated advantages and disadvantages.


What I'm Working On

🏠 Real Estate: I had a couple of unwelcome surprises when I returned from visiting my parents in Arizona. I got two violation notices, one for each of two rental properties, from the city regarding something my tenants had done (mostly leaving trash out too long). Both demanded it be taken care of within seven days. Only problem is that it was 21 days after the letter was sent. Most frustrating is that one of them only got sent to me instead of my property manager, which further delayed things. I got it squared away. Just another fun episode from the life of a landlord. Follow my Instagram for real estate photos.

💻 Open Source:

  • I continued working on Mentoss, a library for mocking global fetch() calls in browsers and server runtimes. I fixed a couple of bugs, ensured types were properly exported, and updating the matching behavior when a request is made without a match so that already-matched routes will also be reported.
  • I switched Social Changelog, a utility that reads a GitHub release and spits out a tweet-sized summary including a link to the release, to use the new OpenAI Responses API. It's much nicer to use than the chat completions API.
  • I updated Crosspost, my utility for posting across multiple social networks, to allow uploading of images (with alt text) to all included strategies.

💻 ESLint: The two things I've been spending time on are:

  • I finished work on adding "extends" back to ESLint through a defineConfig() helper function. I also added some fallback behavior to account for how some plugins are exporting both old-style and new-style configs.
  • We forked CSSTree, the parser that the ESLint CSS plugin uses, because progress on the project had stalled and I couldn't get in touch with the maintainer. I spent a good part of the month reviewing open PRs on CSSTree and merging them into our fork. I also added type definitions to make the forked package easier to work with.

Coaching for Tech Leads and Staff+ Engineers

If you're a tech lead or staff+ engineer, chances are your manager has no experience in your role. While they may be well-intentioned, they may not know how to help you grow in such a challenging position.

That's where working with me can help. As a former tech lead and principal engineer at multiple companies, I learned firsthand the ins and outs of these roles. I work with my clients one-on-one to develop their leadership, communication, organization, and problem-solving skills to succeed in the upper ranks of the individual contributor track.

Human Who Codes Newsletter

A once-per-month newsletter discussing topics important to senior-level software engineers, with a particular focus on frontend technology and leadership.

Read more from Human Who Codes Newsletter
Human Who Codes logo

Thoughts on AI-First Development I spent the past month diving into Copilot Edits, testing whether I could go fully AI-first on my personal projects. Instead of jumping in and coding right away when I had an idea, I let Copilot take the first pass by following my instructions. What sets Copilot Edits apart from earlier versions is its ability to make changes across multiple files—not just suggest edits in a single one. Could this actually save me time and effort? Spoiler: yes, and in a big...

Thoughts on People Skills roles that require more interaction with our colleagues and customers. It’s at that point where a software engineering role shifts from primarily code-based to primarily people-based, and all of a sudden, it’s a different job. Previously, transitioning to a people-focused role took over five years and typically involved several promotions. However, with the advent of AI in software engineering, this timeline is shortening significantly. Companies once hired mediocre...

Thoughts on Debuggability In the early days of web browsers, there were no developer tools. From Netscape to Internet Explorer, and the first version of Firefox, if something wasn’t aligning properly or your JavaScript wasn’t behaving as expected, there was little you could do. The browser provided no additional information. Everything changed with the arrival of Firebug, the first real developer tool for web applications. As a Firefox plugin, it exposed the inner workings of a web browser to...