Is this you? As a journalist, you can create a free Muck Rack account to customize your profile, list your contact preferences, and upload a portfolio of your best work.
Claim your profile
Articles by Gavin Cettolo
GPT-6 Astra: A New Era of Machine Intelligence
Before I get into this, a quick apology — I’m a bit late to the party on writing this. My university semester just kicked back in and the first few weeks are always the kind of chaos that makes you forget you had things to write. But better late than honest, so here we go. What Is GPT-6 Astra? GPT-6 Astra is OpenAI’s newest and most powerful AI model. It was released on September 3, 2026, and OpenAI describes it as the most capable and aligned model they have ever broadly deployed.
I Built a Zero-Dependency Env Validator with Full TypeScript Inference - Here's Why
Every Node.js project I've ever worked on has the same invisible vulnerability. Somewhere in the codebase, there's a line like this: const db = new Client({ url: process.env.DATABASE_URL }) It works in development. It works in staging. And then one day, in production, the variable is missing, misspelled in the CI config, forgotten in a new environment, silently dropped during a secrets rotation. The app starts. No error. No warning.
Why Your Team Feels Slow (Even If Everyone Is Good)
The engineering manager sat across from me with a look I've seen too many times. "I don't understand it," he said. "We have good developers. Smart people. Everyone is working hard. But we're always late. We're always behind. Every sprint feels like we're running through mud." I asked him one question: "When was the last time you mapped how work actually flows through your team, from idea to deployed feature?" He paused.
TypeScript Tips That Actually Matter in Real Projects (including the satisfies operator)
Gavin Cettolo Full stack developer with a passion for technology Location Torino, Italy Education International master degree in Computer Science + MBA Work Fullstack Product & Platform Engineer Joined
You Don’t Need Microservices (Yet): A Reality Check for Devs
You Don't Need Microservices (Yet): A Reality Check for Devs Every few months, I see the same conversation play out in engineering teams. A new project kicks off. The team is excited. Someone opens the architecture discussion and says: "We should probably do microservices". Nobody disagrees. Microservices are what serious companies do. Netflix does it. Amazon does it. Surely we should too.
Clean API Design in Node.js: A Practical Guide
Most Node.js APIs start the same way. A server.js file. A few routes. Maybe an app.js if you've read a tutorial. Everything in one place because the app is small and there's no reason to complicate it yet. Then the app grows. Routes multiply. Business logic leaks into route handlers. Error handling is copy-pasted across files with slight variations. A new developer joins and spends their first week just trying to understand where things live. The API still works.
React State Management: When to Use useState, Context, or Zustand
Here's a conversation I've had more than once. A developer is building a React app. It starts simple, a few components, some local state, everything in useState. Then the app grows. Props start getting passed down two levels, then three, then five. Someone suggests Context. Someone else says "just use Redux." A third person has heard of Zustand. Three hours later, the team is arguing about state management instead of building the product. The problem isn't that there are too many options.
You Don’t Need Microservices (Yet): A Reality Check for Devs
Thanks, @elenchen, and yes, I completely agree with the “architectural sophistication” point. A lot of teams underestimate the operational tax of distributed systems. Once network boundaries enter the picture, every simple interaction becomes a reliability problem. Debugging alone becomes dramatically harder. And honestly, most early-stage products still don’t fully understand their own domain model yet. Splitting services too early often means freezing bad boundaries into the architecture.
API Calls Done Right: From Messy Fetch to Clean Data Layer
I've seen this file in almost every frontend project I've ever touched. It's usually called api.js or utils.js or sometimes just helpers.ts. It starts small. One function. Two functions. Then, six months later, it's 800 lines long, nobody fully understands it, and everyone is afraid to change it.
The Hidden Cost of "It Works": Why Quick Fixes Kill Long-Term Speed
It was a Thursday afternoon when the Teams message came in. A bug in production. A date formatting issue causing checkout to fail for users in certain timezones. Small bug, real impact: the payment flow was broken for roughly 8% of users. The fix took twelve minutes. A single condition, a timezone offset, a hotfix deploy. Everyone was relieved. The PM sent a thumbs up emoji. The on-call engineer closed the ticket.
Stop Using useEffect Like This: 5 Patterns That Are Silently Breaking Your React App
I was doing a code review for a colleague when I found it. The component had five useEffect hooks. No errors. No warnings in the console. The PM had signed off on it. It had been in production for three months. But there was a subtle bug that only showed up when the user navigated quickly between pages. Data would flash. State would reset. Sometimes the old user's name would appear for a split second before updating to the new one. Three hours later, we traced it back to a single misused useEffect.
The AI-Augmented Developer: How AI Is Changing the Way We Write Code
This reminded me of something I read recently. A company was experimenting with ranking developers based on how many AI tokens they consumed. More tokens → higher ranking. Honestly, I find that… questionable. It doesn’t encourage better use of AI. It encourages more use of AI. And those are not the same thing.
Corporate Amnesia: What Happens When Your Team Forgets How Its Own Code Works
A few months ago, we had to change a small piece of logic. It sounded simple. A minor tweak. “Shouldn’t take more than a couple of hours.” Then someone asked: “Do we know how this actually works?” Silence. No one on the team had written that part. The last person who touched it had left. There was no documentation. Tests were… optimistic. What should have been a small change turned into a half-day investigation. Not because the problem was hard. Because the knowledge was gone.
The Strategy Pattern in JavaScript: Replace Messy If-Else Logic With Clean Code
A while ago, I opened a file and immediately knew something was off. Not because it was broken. Not because it was complex. But because it had that shape. You know the one: if (...) { // something } else if (...) { // something else } else if (...) { // another thing } else { // fallback } It worked. But every time we needed to add a new case, we had to go back into that block and make it just a bit worse. And that’s when I realized: This isn’t just messy code. This is a scaling problem. Let’s fix it.
Code Reviews Without Drama: How Great Teams Give Feedback That Actually Helps
A few years ago, I left a code review feeling… weird. The code worked. Tests were passing. But the comments? “This is wrong” “Bad approach” “Rewrite this” No explanation. No context. Just judgment. Nothing was technically incorrect. But something was off. That’s when it clicked: Code reviews aren’t just about code, they’re about communication. And done poorly, they don’t improve the codebase, they just slowly damage the team. TL;DR Great code reviews focus on improving the code, not judging the developer.
Bad Code Is a High-Interest Loan: How Technical Debt Slowly Kills Team Velocity
Thank you @paolozero , I really appreciate your comment, especially the distinction between intentional and silent debt. That’s a nuance I didn’t fully unpack, and you’re right: not all debt is created equal. I like how you framed “leverage vs. liability.” I’ve seen that play out too: teams making conscious tradeoffs to learn fast, then actually circling back to clean things up. When that loop exists, debt can be a tool. When it doesn’t… it becomes exactly the kind of drag I was warning about.
React Components vs Spaghetti: 5 Signs Your UI Is Becoming Unmaintainable
Last week I opened a React component… and immediately closed it. Not because it was complex. But because it felt hostile. You know that feeling: the file keeps scrolling, props are flying around, and every small change feels like it might break something completely unrelated. That’s not complexity. That’s entropy. And if you’ve been building UIs for a while, you’ve probably seen it happen slowly, almost invisibly. Let’s talk about the signals before things get out of hand.
Next.js Folder Zen: Padroneggiare la Directory app/
Se hai iniziato da poco a usare Next.js 13+, probabilmente hai aperto un progetto e hai pensato: “Perché questa struttura di cartelle sembra così... diversa?” Con l’App Router, la directory app/ è diventata il cuore di ogni progetto Next.js moderno. Ma per molti sviluppatori—soprattutto quelli che arrivano dal vecchio pages/ router—la struttura delle cartelle può risultare inizialmente confusa. Sistemiamo le cose.
Il codice non si licenzia, ma le persone sì: Clean Code, Debito Tecnico e Bus Factor
TL;DR Il debito tecnico non è solo un fastidio per gli sviluppatori: è un rischio aziendale con interessi composti. Quando gli sviluppatori lasciano l’azienda, spesso si portano via il “perché” dietro al codice. Il Clean Code non riguarda la perfezione: riguarda mantenere la conoscenza nel sistema, invece che nella testa di qualcuno. This article is also available in English.
Code doesn’t quit, but people do: Clean Code, Technical Debt, and the Bus Factor
TL;DR Technical debt isn’t just a developer inconvenience, it’s a business risk with compound interest. When developers leave, they often take the “why” behind the code with them. Clean Code isn’t about perfection: it’s about preserving knowledge inside the system, instead of inside someone’s head.
Buuuongiorno devs 👋
TL;DR Sono Gavin Cettolo, sviluppatore dal 2017, builder e problem solver. Lavoro principalmente con React e Next.js, ho esperienza nel coordinamento di progetti e ho appena concluso un MBA con il massimo dei voti per comprendere meglio le dinamiche aziendali dietro ogni riga di codice. Ho deciso di iniziare a pubblicare su Dev.To per parlare di React, Clean Code, AI nello sviluppo, OOP patterns, system design interview e organizzazione del lavoro.
Hellooo devs 👋
TL;DR I'm Gavin Cettolo, a developer since 2017, builder and problem solver. I mainly work with React and Next.js, have experience coordinating projects and dev teams, and recently completed an MBA with honors to better understand the business dynamics behind every line of code. I’ve decided to start publishing on Dev.to to talk about React, Clean Code, AI in development, OOP patterns, system design interviews, and project organization.
Show More
loading
Actions
Is this you?
As a journalist, you can create a free Muck Rack account to customize your profile, list your contact preferences, and upload a portfolio of your best work.Get in touch with Gavin
Contact Gavin, search articles and posts on X, monitor coverage, and track replies from one place.
Learn more about Muck Rack