DEV Community

Robert Floyd Dugger
Robert Floyd Dugger Subscriber

Posted on • Originally published at blog.rfditservices.com

Two Years to Feel the Need. One Night to Fix It.

The day before Father's Day, my daughter walked into her first swimming lesson like she owned the place.

She'd been dreaming about water for as long as I can remember. Barely gets exposure to it. Walked in, took to her teacher without hesitation, spent thirty minutes in an environment she loves, had a blast the entire time. All the worry I'd carried into that morning dissolved in about four seconds.

Father's Day itself was quiet after that. Easy. The kind of day where you have space to pick up something you've been thinking about and actually finish it.

I shipped rfd-logging to PyPI.

It's a logging standard. One get_logger call. Structured JSON output. Ten megabyte rotation, five backups, stdout capture for NSSM services. Zero runtime dependencies — pure Python standard library. Forty-six tests. The kind of thing that takes an afternoon to build once you know what you want, and takes two years of building other things before you know what you want.

That's the honest timeline. Over a hundred projects. Probably closer to five hundred if you count everything back far enough. Logging handled differently in every one — sometimes print statements, sometimes a library, sometimes nothing at all. Each project reinventing the same wheel slightly differently. The friction was always there. It took two years to feel it clearly enough to do something permanent about it.

My second PyPI release. The first was openagent-directive — a different kind of primitive, built for a different problem. This one is smaller and more universal. Every project needs logging. Not every project needs an agent directive system. rfd-logging is the kind of package that belongs in every RFD service from day one, and eventually in anything I build regardless of context.

That's what shipping to PyPI teaches that shipping locally doesn't. The question stops being "does this work for this project" and becomes "would someone else find this useful." Building with reusability in mind from the start changes the decisions you make — the API surface, the dependency choices, the test coverage. Knowing it's going somewhere public raises the standard in a way that's hard to manufacture artificially.

The door it opens is faster starts. Not rfd-logging specifically, but the pattern it represents. A shelf of small, tested, installable primitives that remove the setup friction from every new project. Idea to working demo faster because the logging, the config loading, the standard interfaces are already done and already trusted.

Two years of projects to feel that gap. One Father's Day night to close part of it.

The shelf has two packages on it now. That's two more than it had a year ago.

Building in public at blog.rfditservices.com — intake page is there if you're working through something similar.

Top comments (0)