DRY comes last: why duplicative work helps
I've found this pattern of working to really help in my career - but it runs counter to a lot of instincts. Let me explain why I duplicate code first, then worry about abstractions.
Mission driven web developer
I've found this pattern of working to really help in my career - but it runs counter to a lot of instincts. Let me explain why I duplicate code first, then worry about abstractions.
A realization I had about the malaise of the tech world in the age of AI
A list of updates to one of my color utility tools.
The Font Combintaor is back, better, and more standards driven than ever!
A neat HTML trick I just learned
This is the dough recipe that I use to make pizza on Fridays for my family.
It's my blog, dammit.
My not very sophisticated but very understandable approach to making social media share images for a blog in Eleventy.
As a developer I see AI as just another tool to rely on. I look at it as one source of input - a helpful one, but that's it.
I recently led the biggest launch so far in my career. It was far from smooth - how did we get through?
You can build a drop down menu with advanced functionality with CSS alone, thanks to recent advancements to the language. No onMouseOut listeners in sight!
A CSS one-liner to help with your implementation.
You're now a distraction filter.
Inpsired by other articles, here is my journey to where I am today as an engineer, and beyond.
A tutorial on how to use an underused tool in Javascript - the switch statement.
If you find yourself in the middle of a project that doesn’t seem to be moving forward - take a step back and question everything.
We tried the onboarding checklist that I had made previously - did it work?
Why I made an onboarding checklist for a new hire, and ideas of things to include on a list like this.
Why post mortems after an incident are fun and exciting.
If you think something is going south on a project, make noise about it early. You'll be glad you did.
Creating a mock server with msw to make React Testing Librarty tests for your components.
There are a few crucial things that you can do to run really good meetings. I go over what has helped me run a lot of effective meetings over the years.
How I added smooth page transitions to my site using the View Transitions API.
I share a lightweight function that will let you read a GraphQL endpoint without the need for heavy libraries. This is great for simpler use cases.
Learn how to create a dynamic favicon with color-changing capabilities using JavaScript. This article goes line by line explaining how to do it. Additionally, discover how to update Safari's color scheme in real-time using the theme-color meta tag.
Discover the humble Pro's/Con's list, a tool that captures every pro and con in technical problem-solving discussions to avoid repeating the same objections and lead to healthier discussions.
Google Fonts makes a lot of great variable fonts available, but it's not terribly clear how to make use of those fonts. Here are some tips on how to take full advantage of their super powers.
Announcing the new version of my personal website - this time around I built it in Eleventy.
Have a design where you want text to get cut off at 2 or 3 lines? You can do it with CSS alone.
Announcing the VS Code Extension for my one-to-many color translation tool, ColoRosetta
How to combine custom properties and logical properties for layout super powers.
Did you know? All three major browser engines offer an inspector popover for elements. Yeah, I didn't know.
When we added a 'dark mode' to PBS.org's appearance, we wanted to allow users to have a choice to turn it on. That introduces some complexities that you need to account for.
Be sure to pair viewport units with a relative unit when using them on font sizes, or you'll introduce an accessibility issue.
Did you know? You can make a media query based on a viewports aspect ratio, not just it's width.
Why it's important to think about what kinds of decisions you are faced with.
When reporting an issue, make it clear what the impact is.
A playbook for tech managers in dealing with significant outages.
The smaller the individual pieces of work, the greater the chance that a large piece of technical debt will be addressed.
On improving your communication by making request clear and obvious, and not assuming the other person will figure it out.
A way to protect analytics events against refactors and unintentinal breakage - analyics classes in your HTML.
How we went about removing jQuery from a large application that had depended on it for many years.
Best practice is to add `width` and `height` attributes to image elements in HTML to improve browser layout performance.
In Django 3.1 the project updated the default 'referrer-policy' to be 'same-origin', which might lead to unexpected results in your project.
A walk through the typical JavaScript pattern that we use at my work.
A quick look at the relatively new, but well supported, min(), max() and clamp() functions and how you might use them.
Something interesting I learned about using pointer-events and Chrome on inline elements.
A play in one act
How to go about using the Fetch API to POST data to an API.