020 - summer hours
It's been about 45 days since I last posted to the devlog and I am long overdue for a post. I have a few ideas for interesting posts but to break the cycle of silence I'm opting for more of a diary style entry today.
An external observer of my blog and social media might think progress on eno has lapsed. In fact, it's the exact opposite. The past couple weeks especially have been among the most productive on the project so far. The issue is when I am firing on all cylinders, I don't want to sacrifice an hour of programming to put out another blog post.
Of course, going back further, I did slow things down a bit for the kids summer holidays. I joked to some friends that eno was on summer hours - but instead of half days on Fridays, I don't work, except for a half day, on Friday. Being able to set work down for a few days or weeks with zero consequences is one of the few benefits of having a business with no customers, employees or investors. I might as well enjoy it!
This enjoyment was always in tension with my overarching fear of failure and I soon was looking for ways to jumpstart the work ethic again. My solution this time was to make a pact to have GitHub activity on 6 of every 7 days. For those who aren't familiar with GitHub, it is a tool many programmers use to track their code and it famously has this diagram on every person's profile page so you can see how hardcore they are:
Here you can see things really fell apart for me productivity wise as my kids' school was wrapping up, followed by three weeks of holiday beginning at the end of June and then eno's "summer hours" in July and August. I've only had 3 days with zero contributions since August 21st though so I am back on track (I will green today's square after writing this post).
These squares are highly gameable - you literally just need to push a one line change to go green. In some ways, you almost need to game them: one day, after spending hours writing code I checked my profile and realized that I hadn't actually technically triggered the requirement for a green square yet - that insanely productive day was about to register as nothing.
Actual and perceived productivity in programming is a very interesting phenomenon. It can take weeks to do something that seems unremarkable, and then take a single day to do something that seems magical. For instance, I struggled for two weeks to get a single letter to display on my screen. When it finally worked, I was able to connect this new rendering code with the code I had written for my original terminal user interface and within a few days I went from that single letter to having a fully working text editor as a native Mac application.
One of the biggest force multipliers in programming productivity is when you realize that two seemingly unrelated concepts are actually more or less identical at a technical level. This happened on a stunning level this month.
I was starting to find it very frustrating that eno did not have undo/redo so I set out to add this feature. As I started to figure out how to implement it, I realized it was closely related with the version control system (VCS) features I have envisioned for eno. Instead of saving separate v1, v2, v3 (final), v3 (final-2) files, all of this will live in a single eno file that tracks every change ever made across all the documents you are working on. If eno tracks every change, then undo/redo just means using that system to move back/forward one change.
I started some experimental work to see how VCS in eno might work and saw some striking similarities to the live reference features I had already written (where text auto-updates in one place when you make changes in another place). I began to conceive of a single system that would enable tracking every change and live templating documents, all off of one code path.
Two weeks later, I am very excited about where this new system is going. If it comes together the way I imagine, I think it's going to be really good…really. really. good.
—
P.S. Here's a picture of my notebook. I have about 20 pages covered in these kinds of diagrams.
If you enjoyed this post, subscribe below to get notifications for the next one.
We also have an RSS feed