It’s almost as if showing anything less than a pixel-perfect, style-guide-compliant build is a sign that you’re a bad developer—or at least, that you’re making someone else’s life harder down the line.
I used to think the same thing, especially when picking up projects after other devs.
It’s easy to open up a new site, see a pile of inconsistent classes or a jumbled CMS structure, and think: “Wow, this is terrible. Who thought this was a good idea?”
But in reality. No one thought it was a good idea. You're just looking at a collection of 'quick fixes' that someone said they'd 'get back to it at the end' but finished the project and dipped.
Often, it’s not that the first version is “bad.”
It’s that the dev just ran to the deadline, shipped something that worked, and moved on.
They never spent the time tiding up, adding comments, renaming things and so on.
---
That’s become one of my core lessons.
The day you launch a project shouldn’t be the finish line for quality.
If you never revisit the build after the initial “it works!” moment, little issues and hacks are guaranteed to stick around.
Small technical debts add up—unintuitive class names, utility styles multiplying, the odd override for something that didn’t quite fit.
Those debts don’t always come from laziness or incompetence (okay, sometimes they do but still).
More often, they’re the result of building fast, solving unknowns, and then getting swept into the next project.
---
Personally, I’m not precious about getting every detail right on the first go.
I want the function to be correct, not the pixel-perfect finish.
A recent example: I was working on a CMS collection where the last row of items needed to “fade out” visually.
- First attempt: Masked the whole collection list using a mask—looked cool, but as the list grew, it hid too many items due to using % values
1.my-list {
2 mask-image: linear-gradient(
3 white 80%,
4 transparent 100%
5 );
6}
- Second attempt: Used CSS to target and fade the last three items—worked, except when the grid ended up uneven (which it often did), the effect would hit the wrong items. Not very robust.
1.my-item:nth-last-child(-n + 3) {
2 mask-image: linear-gradient(
3 white 80%,
4 transparent 100%
5 );
6}
- Final solution: Dropped a simple overlay gradient across the whole list. Not fancy but worked better than the other solutions.
All of this was tested with the default styling on the pagination button and half finished list styling
If I’d obsessed over fine tuning the gradient mask on the first solution from the start, I’d have lost a chunk of time (and energy) styling elements I was going to delete
Instead, I moved fast, kept things rough, and wasn’t afraid to throw away work that didn’t fit.
---
This is where I think the “true professional” shows up.
Not in flawless first versions, but in _making time_ to refactor, clean up, and turn a working build into a robust product.
I keep a running checklist—nothing fancy, just “refactor buttons,” “consolidate text classes,” “fix accessibility on blog.”
As I build, if something gets tangled or feels off, I log it.
Then I _actually_ block time—roughly 45 mins twice a week to go through the project and polish it up for a bit. Then I allocate a day after launch cleaning things up.
This includes things that are easy to ignore
- Component names
- Component properties
- Aria and accessibility
- utility classes
It’s not about making things perfect, but about making sure the project is genuinely ready for handoff.
That might mean renaming classes, cleaning up unused styles, tightening up component logic, or just using the site like a client would.
---
One of the best habits I’ve picked up is spending time _using_ the site before handoff.
I’ll open it on my phone, click around, try editing content.
If something feels awkward or breaks, I note it for later.
The key here is noting it down. You don't want to fix what you see because you'll get fatigued doing all the context switching. Make a list.
If you allocate 15 mins for desktop and 15 mins for mobile to just test the site out on a regular basis you'll find you're a lot more confident in the sites you build
---
It’s taken me a while to see this as normal.
What separates good projects from great ones is having a system to clean up after yourself.
Making refactoring a scheduled, intentional part of the workflow—not an afterthought, and not something you do only if you “have time.”
If you’re picking up someone else’s work, give them some credit—they probably had the same constraints you do.
And if you’re handing off your own, remember: the launch day isn’t the end.
It’s just where the work shifts from “does it work?” to “is it worth living with?”
A practical, code-heavy dive into GSAP’s utility functions—keyframes, pipe, clamp, normalize, and interpolate—and why they’re so much more than just shortcuts for animation math.
GSAP lets you pass _functions_ as property values. I've known this for a while but never really explored it particularly deeply. Over the last couple of weeks I've been testing, experimenting and getting creative with it to deepen my understanding.
Exploring ways to keep JavaScript modular and maintainable in Webflow — from Slater to GitHub to a custom window.functions pattern. A look at what’s worked (and what hasn’t) while building more scalable websites.