#8 / Apr 14, 2021

Building React + Vue support for Tailwind UI

This is a fantastic read for any frontend engineer. It simultaneously hits on many relevant and important topics (building custom component libraries, the idea of "headless" components, appropriate abstraction) while also being centered around around an increasingly popular web development tool in Tailwind.

Why I Prefer Makefiles Over package.json Scripts

John Ruble makes a keen observation: when all you have is a hammer package.json file, everything looks like a nail NPM script.

As you pile more complexity into your NPM scripts, it never feels like you're the one placing the straw that breaks the camel's back. But please, take a step back, look at your poor camel, and consider using another tool.

Document Your Project’s package.json File

In any JS/TS project, the package.json file contains an enormous amount of information. But because it's JSON, there's no documentation. This post explores what in package.json to document and where to document it.

People Skills

Nicholas Zakas writes about relationship building skills being the key to reaching later stage promotions in this month's Human Who Codes newsletter:

"At a certain point in your career, you'll stop being judged so much on your technical work, and you'll start being judged on how you work with people." These wise words from my manager at Yahoo over ten years ago were the key piece of advice that changed my career. Prior to that, I had assumed that the way to get ahead as a software engineer was to, you know, be awesome at writing software. I had never put much weight on my relationships and how they might affect my career. The technical skills get your foot in the door and get you your first promotion, but it's the people skills that allow you to progress after that point.

Continue reading

People skills are sometimes called "soft skills," though that really is a bit of a misnomer. There's nothing soft about working on relationships or looking for ways to resolve conflict and disagreements. In fact, I often tell my clients that the easy part of software engineering is the code, it's the people that are the hard part. Code isn't up all night because the baby was sick; code isn't in a bad mood because they got into a fight with their spouse; code isn't remembering something you said that upset them three months ago. People are always a wild card in any business, but in software engineering, where so many of us tend towards introversion, it becomes even more important to spend time on building and maintaining relationships.

I remember one specific instance where this stuck out to me: I had stayed late to work on something and a colleague instant messaged me to ask for help on something. This was a colleague that I had had numerous unpleasant interactions with in the past few months. Upon continuing the conversation, I discovered that what they were "working on" was actually a side project, and I got angry. I didn't want to spend my work time helping on a side project. But I calmed down and decided that this would be a good way to build some rapport. By the end of the conversation, I had learned more about my colleague than I had in the past six months. We connected on a human level and talked about relationships and troubles and all kinds of things that were non-work related. The result? I never had another negative interaction with them again. In fact, I became the person they would confide in when they had a negative interaction with someone else.

This isn't to say that you need to be best friends with everyone you work with. That's not humanly possible and way too much to ask. However, paying attention to the relationships you have with your colleagues, working through disagreements constructively, communicating effectively, and helping to get everyone on the same page are all key skills that you will need to have a long and successful career in software engineering.

Think about the amount of time you spend learning new technical skills. Now think about how much time you've spent learning how to interact with people better. If there's a disparity, you may want to consider switching things up. Part of why I share the random books that I read in this newsletter is because a lot of them help me to understand and interact with other people better, and I hope that my recommendations will also help you do the same.

Embrace the Grind

Jacob Kaplan-Moss (co-creator of Django) on a non-secret to success: sometimes there's enormous opportunity in just being willing to do tedious work that no one else is.

Gitlet.js

Mary Rose Cook (an engineer at Airtable) explains how Git works using a 1000-line simplified implementation of Git written in JavaScript.