Welcome, Developers! 👋
With 2025 coming to a close, it's the perfect time to round up the content you loved most this year. This email is longer than usual so you can also view it as a blogpost here for more comfortable reading.
Before we dive in, happy holidays from SitePoint wherever you are! | | |
From our sponsor: Codemetrics
| | | |
| What does your code say about your team? Codemetrics analyzes real code—not standups, not self-reports—to surface who’s shipping high-quality work and where teams are slowing down. If you manage engineers and want signal over noise, this is worth a click. |
| Get Started Free | | | |
🔖 The Reading Room
Articles we have hand-picked for you: | | |
🙃 My AI Skeptic Friends Are All Nuts
A fun write-up from Thomas regarding AI-assisted coding where he doesn't shy from using strong language.
"Some of the smartest people I know share a bone-deep belief that AI is a fad — the next iteration of NFT mania. I’ve been reluctant to push back on them, because, well, they’re smarter than me. But their arguments are unserious, and worth confronting. Extraordinarily talented people are doing work that LLMs already do better, out of spite."
By Thomas Ptacek → | |
⏱️ How I Program With Agents
Agents are simply "9 lines of code" - a for loop containing an LLM call that can execute commands and see output without human intervention. David explains the basics of agents and showcases how he implemented GitHub App auth in days rather than weeks, despite the agent creating initial security vulnerabilities that were quickly caught and fixed through proper code review.
By David Crawshaw → | |
🤔 SQL NULLs are Weird
SQL's UNIQUE constraints allow multiple NULLs because in SQL, NULL isn’t equal to NULL—it’s "unknown." This counterintuitive behavior impacts major databases like SQLite, Postgres, and MySQL, potentially causing subtle bugs, especially when using ORMs. By Raymond Tukpe → | |
🎮 Making a Browser Based Game With Vanilla JS and CSS
Step away from the framework overload and build a flag-guessing browser game using only vanilla JavaScript and CSS. Learn how to structure game logic, implement scoring mechanics, add animations, and create engaging UI elements, all while keeping your code clean and modular.
By Eoin McGrath → | |
💬 Prompt Engineering for Web Development
The better the prompt, the better the answer. We can fill in the gaps for information but leaving room for guesswork is a bad idea for LLMs. Check out how quality inputs lead to quality outputs, with examples contrasting good and bad prompts. By Kevin Leary → |
| | |
📐 The 13 Software Engineering Laws
From Conway's architectural influence to Brooks' counterintuitive staffing insights, thirteen software engineering laws provide crucial guidance for tech teams. Particularly valuable is understanding complementary laws like Goodhart's (metrics become useless as targets) and Gilb's (measuring imperfectly is better than not measuring) to navigate project management challenges.
By Anton Zaides → | |
🎨 What You Need To Know about Modern CSS
Chris goes through newer CSS features in 2025, including new custom @function, conditional if(), and the powerful shape() function. Key updates also address UI interaction with Popovers, auto-sizing fields, typography enhancements (text-wrap), advanced easing via linear(), and controlled focus navigation via reading-flow.
By Chris Coyier → | |
🎓 ChatGPT as My Coding Mentor: How I Learned React and Next.js
Two months transformed a junior developer who didn't understand JSX into someone confidently building full-stack applications. The secret lies in setting your experience level, requesting analogies first, and building understanding progressively rather than seeking quick code solutions.
By Ellenoor Bok → | |
🤝 How to run exceptional 1:1 for engineers
Most engineers and managers treat 1:1 meetings as obligatory status updates, wasting valuable time on conversations that could be emails. The key is understanding that 1:1s aren't project management meetings but relationship and career accelerators focused on the person doing the work, not the work itself.
By Dr Milan Milanović → | |
🥀 OOP: Programming's Biggest Mistake
Object-oriented programming emerged as a revolutionary concept but became software development's greatest burden. Classes, inheritance, and methods create unnecessary complexity, restrict code reuse, and force developers into convoluted patterns. Functional programming offers simpler, more flexible alternatives using pure functions and data structures, eliminating the need for dependency injection, design patterns, and boilerplate code.
By Alexander Danilov → | |
| |
📝 How To Write A Great Agents.md Analysis from 2500 repositories shows successful agents.md files put executable commands early, use real code examples over explanations, set three-tier boundaries (always do, ask first, never do), specify exact tech stacks with versions, and avoid generic helper roles in favor of specialized tasks like testing or documentation.
By Matt Nigh → | |
🪦 The fate of “small” open source
Since majority of coders use AI today, there's no longer any incentive to create small, educational open-source packages. These libraries perform a small or niche function that today's AI models can already instantly write the code for making these libraries obsolete.
By Nolan Lawson → | |
📦 How to keep package.json under control
Managing dependencies requires careful reading, regular audits, and tools like Renovate and Knip to keep the bloat under control. The key is reading every new dependency's source code and understanding both your problem and the solution before installing.
By Tom MacWright → | |
⚡ Building React Apps with Bun
Bun feels amazing for React as it combines runtime, bundler, and package manager into a single fast tool. It delivers near-instant startup times and seamless hot reloading, making traditional webpack and Vite setups feel sluggish in comparison.
By Peter Mbanugo → | |
📁 Handling Routes in JavaScript Projects
File-based routing in modern JS frameworks creates maintenance nightmares without proper abstractions. Hard-coded route values lead to typos, refactoring headaches, and scaling issues. Start with a simple constants file to centralize route definitions and maintain your sanity as projects grow.
By Sean Davis → | | |
| |
| |
🚀 Continuing the top clicks of the year Here are ten more to finish the year:
| | | | | |
| | What does your code say about your team?
Codemetrics analyzes real code—not standups, not self-reports—to surface who’s shipping high-quality work and where teams are slowing down. If you manage engineers and want signal over noise, this is worth a click. Get Started Free |
| | |
🎤 Your Voice Your feedback shapes what comes next! We read every email, so simply hit reply and tell us what's on your mind.
| | | | | |
|