Word Counter - Writing Productivity App for macOS

The Context

Word Counter was born from my own need as a writer to track daily output. Started in 2014, it was my first commercial Mac app and my introduction to the world of indie development proper.

The app measures writing productivity, helping authors maintain consistent output and reach their goals.

Technical Challenges

Architecture Evolution

Modular Development Out of Necessity

As a poor student with an underpowered Mac Mini, I didn’t have the resources to compile large codebases for TDD – compilation times would kill my flow. So I developed a different approach: I worked on framework bundles, individual dynamically linked libraries that I could compile and test in isolation. This was not very common back then as iOS hardware limitations in particular made startup times slower when you linked too many libraries. And “too many” wasn’t actually a lot. So I was a bit scared about the outcome for my project on Mac, but it worked really well: Only a small shell app would assemble these components into the actual application.

This constraint-driven architecture turned out to be a blessing:

What started as a workaround for hardware limitations became a principled approach to modular app development that I still advocate today.

For Word Counter specifically, I developed some features as isolated packages that eventually became open source components. This taught me the value of building reusable, well-tested modules that could benefit both my apps and the wider community.

This approach would evolve further in TableFlip, where I used even more framework targets within the app itself. Eventually, this became my standard approach for complicated apps: I’d identify the features and visual UI components I wanted, develop the UI components in isolation as modular pieces, and only integrate them into the app very late in the process. This “late integration” approach meant each component was truly independent and reusable.

Early Swift Adoption

Rolling My Own Store

Word Counter was where I first implemented FastSpring integration for selling outside the Mac App Store.

This involved:

This FastSpring integration became the foundation for my book “Make Money Outside the Mac App Store”, where I documented everything I learned about selling Mac apps independently. The battle-tested code from Word Counter became the sample implementations in the book, helping other developers escape the App Store’s 30% cut.

Team Dynamics

As my first solo commercial project, Word Counter taught me about the full product lifecycle:

Personal Reflections

Word Counter was my app development education:

Looking back, I was doing many things for the first time and trying to do them well – but also manually. The VIPER architecture meant wiring everything by hand, maintaining full control over every interaction. It would take years before I’d discover (particularly with Enai) that AppKit actually offers more elegant and robust patterns if you work with its conventions rather than inventing your own. But this early exploration taught me the value of understanding what you’re abstracting before you abstract it.

This app showed me that successful software doesn’t need to be complex. Writers want to write, not fiddle with settings. This “do one thing well” philosophy influences all my work.

Impact

Word Counter panel showing daily writing statistics
Word Counter's panel showing daily writing progress
Word Counter history view
Complete history tracking of all writing sessions

Over the 10+ years, Word Counter has helped thousands of writers:

Most importantly, Word Counter proved to me that indie development was viable. Its steady success gave me the confidence in my own products. There was a way to write solid software that doesn’t crash and delights people.