Adam James

September 16, 2021

RSS-Saver - A Finished Project

Screen Shot 2021-09-16 at 12.12.42 PM.png


I sometimes worry that I lack certain important skills as a self-taught developer. I sometimes lack design ability, don't always know the best ways to do software project management, fail to write enough documentation and tests, and, perhaps most critically, often fail to finish projects.

Fortunately, I think these skill gaps aren't permanent. In fact, they're probably not too hard to develop with a bit of focus and effort. As such, I'm taking all of my software projects as opportunities to practice design, documentation, and shipping skills.

I do this by following a few steps:

  • Have an idea. The fun and easy part.
  • Start a Design Doc. The first pass can be as simple as a list of 'features' I want to have.
  • Refine and fill out the Design Doc.
    • Eliminate 'nice to haves' from the feature ideas.
    • Describe with reasonable clarity the problem I'm trying to solve.
    • State the requirements. A list is fine, but add as much context as needed for larger projects
    • State what will NOT be included, if it's useful for setting expectations.
    • Create additional notes regarding technologies and strategies that will be used for each requirement.
    • Editing the Design Doc. as you discover new needs and ideas is good, but keep the scope tightly controlled.
  • Build the 'skeleton' of the project. This might be some CLI with stub data. Commit this to the main branch.
  • Build functionality in git branches (This may change in future, but I enjoy this approach at the moment).
  • Write docstrings as I write functions. Don't do it for every function, but for ones that need clarity, do it!
  • Write tests as I write functions
  • Refine Docs and Tests
    • Add integration tests to cover tricky bits of the program
    • Clarify and edit notes in .org files
    • Make the readme.md super clear. Include Usage, Config Options, Links to detailed docs, Running Tests, Build instructions, and make it read clearly! This is the 'front page' for a lot of projects so make it look good.
    • Bonus: Create blog posts for interesting bits of the code.
  • Release! (Clojars for libs, GitHub repo for scripts, GitHub releases for binaries(?), hosted app for web app, etc.)

This process of mine will evolve over time, but paying attention to all of the above aspects of a project has already been very rewarding! Which brings me to the title of this post: I've actually finished a project!

RSS-Saver

RSS-Saver is a simple Babashka (Clojure) script that downloads my world.hey.com/adam.james/ feed and saves each article to .edn files. I automate this by running the script through cron every day at noon.

The project page is here.
The interactive web version is here.

I'm proud of this first project completed under my new initiative to become a more professional developer. Thanks for reading, I hope you have a good day.

Support

If you want to support my work, you can provide a one time donation here:
https://ko-fi.com/adamjames

Or you can become a Patron of mine here:
https://www.patreon.com/adam_james

Support is never required by me, and anything I write or produce publicly (not explicitly as a paid product) is always free to consume with no obligation or expectation. I want to be a maker and a creator, and much of the time sharing work is reward enough. 

At the same time, we live in a world where money is very important, and I won't lie and say I don't need some. If you feel so inclined to share a donation, just know that I am extremely grateful.