Curated river of news
Reader
Latest posts from blogs I follow
TIL Poppler's pdftoppm to convert PDF pages into PNG files(opens in new tab)
Today I learned about pdftoppm, a simple CLI tool that can convert each page of a PDF into separate image files. My use case was to chop up a few big PDF reports to make OCR and data analysis easier, ...
OKRs: Objectives, Key Results, and Corporate Cosplay(opens in new tab)
A cynical developer's guide to why OKRs often fail, how they sometimes help, and what to do when you're assigned 15 of them.
Scrum Helped. Then It Got in the Way.(opens in new tab)
Scrum helped us escape the waterfall. But it’s become more ceremony than substance—and the real work is happening in the cracks between stand-ups.
About(opens in new tab)
The Cynical Developer is a blog for tired engineers, reflective skeptics, and anyone who’s seen too many “Next Big Things” end up as tomorrow’s tech debt. This site is maintained by a seasoned developer with a mild aversion to buzzwords ...
Contact(opens in new tab)
Want to reach out? I’m happy to hear from fellow devs, writers, or the hopelessly over-engineered. Email: [email protected] Please don’t send cold sales pitches. I’m not that kind of cynical. Got something to say? Use the form below. Please, no ...
From JNDI Hell to CDI Heaven: A Developer’s Path to Sanity(opens in new tab)
Because @Stateless shouldn’t require 3 XML files and a blood sacrifice.
Well, what if I'm wrong?(opens in new tab)
Anyone online has seen over the past years how the frequency of Palestinian accounts on Bluesky and other platforms has increased, two- and four-fold, folks asking for help and linking to GoFundMes. They share their stories and plea for help, ...
Have We Lost Our Way?(opens in new tab)
Agile was never supposed to be a checklist. Somewhere between the ceremonies and the certifications, we forgot what it was for.
Unravelling t-strings(opens in new tab)
PEP 750 introduced t-strings for Python 3.14. In fact, they are so new that as of Python 3.14.0b1 there still isn't any documentation yet for t-strings. 😅 As such, this blog post will hopefully help explain what exactly t-strings are ...
Design Pressure(opens in new tab)
Ever had this weird gut feeling that something is off in your code, but couldn’t put the finger on why? Are you starting your projects with the best intentions, following all best practices, and still feel like your architecture turns ...
Laser-cut pottery throwing gauge(opens in new tab)
Salter’s Screwdriver Theory of Latency(opens in new tab)
We’ve all noticed that software never seems to get any faster no matter how much faster the hardware gets. This easily-observable fact is usually explained in one of two ways: Software devs are lazy, and refuse to optimize more than ...
2025 Advice to my old selves(opens in new tab)
I turned a birthday recently and it was so busy (DataCouncil + sg flight) that i never really got the chance to sit and reflect. a lot of things are going well, lots more could…
As the pendulum swings(opens in new tab)
Getting from command-and-control to trust and autonomy—and why most teams never quite make it.
Organizing a design system via folksonomy(opens in new tab)
An Evolution of a Software Company(opens in new tab)
The startup origin story you've lived through at least once—and what usually comes next.
Distributing command line tools for macOS(opens in new tab)
In this post I’ll show how to properly distribute a command line tool for macOS.
Knowledge creates technical debt(opens in new tab)
Some history on term “technical debt” and on better language to use when communicating about it.
The experience is enough(opens in new tab)
I found my tribe at a conference.
🤷♂️ I miss Visual Basic(opens in new tab)
I miss Visual Basic. I could build something meaningful with it in 15 to 30 minutes in a way that I have never seen anything since then, even come close to. “For example, I personally believe that Visual Basic did ...
HTML is better than React!?(opens in new tab)
“[...] baseline HTML that gets progressively enhanced into something better when JS is available… 1. Gives people a more usable experience earlier in the process. 2. Ensures that on slow connections your site doesn’t seem like trash. 3. Means that ...
It wasn’t the idea that failed: it was the execution(opens in new tab)
And we still can't get it right in 2025.
🗓️ Office Hours for May 2025(opens in new tab)
This Friday, I’m hosting a morning edition of my office hours, and here is my schedule for the rest of May: Friday, May 9th, 2025, 8am to 10:30am - 🌄 Early edition (Time.is link for CT) Friday, May 16th, 2025: ...
234: pytest-metadata - provides access to test session metadata(opens in new tab)
pytest-metadata is described as a plugin for pytest that provides access to test session metadata. That is such a humble description for such a massively useful plugin. If you're already using pytest-html, you have pytest-metadata already installed, as pytest-metadata is ...
Static as a Server(opens in new tab)
You wouldn't download a site.
RSC for Astro Developers(opens in new tab)
Islands, but make it fractal.
233: pytest-check - allow multiple failures per test(opens in new tab)
pytest-check is a pytest plugin that allows multiple failures per test.Normally, a test function will fail and stop running with the first failed assert. That's totally fine for tons of kinds of software tests. However, there are times where you'd ...
Functional HTML(opens in new tab)
Tags on both sides.
Tips for PyCon tutorial presenters(opens in new tab)
Terminal Trove April 2025 Wrap Up(opens in new tab)
A wrap up of all the things that happened in Terminal Trove in April 2025.
Welcome to The Cynical Developer(opens in new tab)
I’ve been a commercial software developer since 2005. I’ve earned a BSc in Computer Science (mostly for the debt), and spent the last two decades writing code at big corporations, scrappy startups, and everything in between. WYSIWYG This blog exists ...
🤖 Voice Dictation with AI and my MacWhisper Workflow(opens in new tab)
I recently came across Simon Willison’s post about Matt Webb’s Apple Watch dictation setup on Interconnected. He records voice notes while running with the Whisper Memos app, then cleans up the transcript with Claude when he gets home. Matt Webb ...
DevOps Sushi(opens in new tab)
We sit down for a deep-dive conversation with Mischa van den Burg, a former nurse who made the leap into the world of DevOps. We explore the practical realities, technical challenges, and hard-won wisdom gained from building and managing modern ...
Thrive(opens in new tab)
p.s. coffee is not breakfast
I’m fascinated by the scale of things in space(opens in new tab)
232: The role of AI in software testing - Anthony Shaw(opens in new tab)
AI is helping people write code. Tests are one of those things that some people don't like to write. Can AI play a role in creating automated software tests? Well, yes. But it's a nuanced yes. Anthony Shaw comes on ...
MCPing in the Open with Angie Jones(opens in new tab)
Angie gives us a crash course on Model Context Protocol (MCP) and how you can get started using it with goose. We also talk about other projects Angie's worked on at Block and what drives her to keep learning new ...
What Does "use client" Do?(opens in new tab)
Two worlds, two doors.
Electric Myths(opens in new tab)
Read my essay for Naive Yearly 24' about life and the web!
Impossible Components(opens in new tab)
Composing across the stack.
Why Silicon Valley CTOs Are Secretly Moving Away from React(opens in new tab)
“Several CTOs mentioned a surprising problem: while React developers are plentiful, truly skilled ones who understand the deeper patterns are increasingly rare and expensive. [...] Several companies reported that their most experienced engineers were getting frustrated with the growing complexity ...
Which social network are we using for PyCon US this year?(opens in new tab)
Motivated to Learn with Adriana Villela(opens in new tab)
After 25 years in tech it’s hard not to coast. Adriana has come from writing word docs for the ops team to deploy software, through Devops, and now has a focus on OTel and Kubernetes. How do we get more ...
JSX Over The Wire(opens in new tab)
Turning your API inside-out.
Recovering from Disaster with Seth Eliot(opens in new tab)
Disaster recovery is more than automation and infrastructure. There's a lot that goes into your services and some of those things can't be defined as code or automated. When was the last time you restored your database from a backup? ...
231: pytest-repeat - works fine on Python 3.14(opens in new tab)
pytest-repeat is a pytest plugin that makes it easy to repeat a single test, or multiple tests, a specific number of times. works fine on Python 3.14is tested on Python 3.9-3.14probably works fine still on 3.7 & 3.8This episode also ...
Ephemeral Pull Request environment using Vcluster.(opens in new tab)