#30DaysOfCommits Retrospective
Published: 2019-08-05 05:14:29

It's over. I can breathe. I can *really* breathe.

I didn't expect the 30 days of commits to be such a big challenge but July was also one of my busiest months in my personal life -- I moved several times and I had a business trip.

So how did I do? Well, look at the github chart below!

![github timeline for 2019 with July highlighted](https://antjanus.com/wp-content/uploads/2019/08/github-timeline-2019-1.png)

Eh, it's not super visible but the pink rectangle sections off July with the exception of the black square which is still June. There are markedly some gaps and I don't think I ever actually made it to 30 days of commits!

So what happened? What did I accomplish? And will I do this again?

## 🥅 The Goal

The goal was plain and simple and stated in my [intro post](https://dev.to/antjanus/i-m-starting-30-days-of-commits-in-july-who-d-like-to-join-me-n5o) on the topic:

> Do 1 commit a day in July toward an open source project

## 👬👭 The community

I opened up my dev discord server for people to join me on this journey and we had quite a few people shared progress regularly! It got busy at the beginning and kind of waned over time but it was helpful to do this with others.

I think we all supported each other quite well.

I'm used to doing these "1 [something] a day challenges" -- from NaNoWriMo (a writing challenge) to NaNoEdMo (an editing challenge) and everything in between -- especially stuff I make up for myself. And every time, the community is probably one of the most encouraging aspects of those challenges. 

To have people to share this challenge with, unite the struggle with, and celebrate each other's victories

## 😤 So what did I accomplish?

My goal was to work on my Photo Management tool called `Skok`. Skok is a Czech word for `jump` (FYI, I'm Czech! Ahojte vsychni!). It's a play on an app that inspired me to make it: Timehop (get it? GET IT?).

Anyways, wordplay aside, I wanted to get closer to a full release of this app and I think I did, just not in a way I expected.

### 🧪 Tests, tests, and more tests 

One of my big goals for this app was to setup testing for the backend which does the heavy lifting: indexing photos, deduplicating them, and querying against a DB of photos. 

I *did* accomplish this. Through hard work and perseverance, I setup testing through Jest. Not only that, but I wrote a ton of tests covering all of the backend pieces which were brittle and difficult to test manually.

In the end, the best part of this effort was that whenever I add a new feature (like thumbnail generation!), I'll already have everything ready to build it out separate from the frontend.

### 🏗 Refactoring the frontend

I started to build the app frontend in React late last year and this year, I got a *ton* more experience with React at work -- we're switching to it from Angular. So I also spent a significant portion of my "commits" moving things around and making them make more sense in my head.

This can be a trap because refactoring (especially React) is so much fun. It's really easy to get stuck in a mode where you're trying to figure out how to best structure components and files.

But hopefully, this is the last time I do a big refactor like this.

### 🐛 Bugfixes!

So, I thought my app was running smoothly until I wrote tests...which revealed a great deal of bugs. I fixed them up -- and I'm happy about it. :)

This means my application has a little bit more stability.

## How was it? And why the gaps?

Honestly, it was tiresome and to the point where I don't know if I want to do it again. I've been slowing down on side projects for quite a while already -- mostly because work has been taking up the bulk of my development energy and also because I do what I *want* to do at work. I'm coding React, I'm writing awesome code, and I'm generally enjoying it.

### The downsides

So at the end of the day, when I'm super tired, I don't generally feel like working on side projects.

Occasionally, I do, but it's usually a quick sprint over the course of a few days to build something quick.

> Lesson learned: programming for 30 days straight on side projects has extremely diminishing returns.

I would benefited from taking the weekends off -- or the other way, taking several days off during the week and focusing on the weekend for side projects.

> Just as working more than 40 hours a week can be detrimental, so can working on side projects even when you're tired and don't want it.

### The Upsides

The upside is that it *was* a grind. And the grind ended up getting me through the sticky tough parts of development that I find difficult to tackle when I want to just program -- I got tests done. I'm *so* happy I have tests. I'm not a fanatic of the TDD doctrine but having backend tests makes it easier to developer back-end heavy logic separately from the front-end.

Unlike traditional server work (which focuses on CRUD), I have been developing an app that deals with the file system, that has to create thumbnails, that has to crawl through folders. Stuff that I really needed to have solid tests for and where bugs were difficult to spot form simply using the app -- and I did that, I found bugs in places where I thought things worked smoothly.

> Plus, I'm walking away with a product that's prepped for bigger sprints.

## The next sprint

I'm planning to do another `Shippening` event at the end of the year. If you don't follow me, you might not know but last year, I was part of organizing a loose event called the Shippening. A 3-day product sprint/hackathon between Christmas and New Year's. And while I don't celebrate Christmas, it was a "dead zone" for me as well. No big holiday happens during that time, work usually slows down to a halt, and so on.

I hope to see you there! And I'm super happy to have an app setup for that kind of hackathon! :)