Write linked notes so you don’t have to remember

Writing linked notes helps engineering makers and managers alike develop the super-powers of augmented memory and the appearance of effective multitasking.

I’m revisiting Simon Willison’s essay and conference talk Massively increase your productivity on personal projects with comprehensive documentation and automated tests. I’ve started thinking about it1 as “the surprisingly effective power of writing linked notes”.

In particular, those last three words:

  • Writing: most thinking is improved and clarified by writing.
  • Linked: writing is even better when the writer or interested colleagues can return to it later. Linking facilitates discovery via browsing and searching.
  • Notes: mostly static text, but sometimes executable tests/documentation, too!

Over time, writing linked notes gives you what looks like the myth of multitasking. Really, it’s reducing the cost of context-switching and remembering:

This is how it relates back to maintaining 185 projects at the same time.

With issue driven development you don’t have to remember anything about any of these projects at all.

I’ve had issues where I did a bunch of design work in issue comments, then dropped it, then came back 12 months later and implemented that design—without having to rethink it.

Occasionally, I get a feeling, whilst working on a tricky problem, that I am starting to lose the thread. Keeping all the variables, ideas, and context is difficult as the interconnections grow. That’s the moment when writing it down to get it out of my head allows me the space to remember less, concentrate more, and push through to make progress again.

Highly recommended.

  1. And, sharing it with anyone who will listen. Present company included.

Top of Mind No. 3

Working in small increments towards medium-to-large projects or outcomes is tricky. I too frequently find myself down a much deeper rabbit hole than I’d intended. And I’ve spent a lot of time thinking about it and practicing at it! Recommended reading: Simon Willison on productivity.

Read-only and write-only modes of accessing social media – there’s something good here. E.g., blogs and feed readers are distinct from most1 posting software. Currently, I’m reading Twitter once a day, as a digest, without the ability to scroll an infinite timeline. If I want to post, I open up an entirely different app that nudges me towards writing instead of dashing off hot-takes. Interestingly, Typefully and Mailbrew are what I’m using for this and are made by the same team. I wonder if that was intentional or a happy accident?

Billing/subscriptions/payment projects are absolutely crucial, “undifferentiated heavy lifting”, and difficult to pull off. I have a ton of unstructured ideas about this. The latest kernel of an idea: billing projects are very likely to involve weird interactions between business goals, customer psychology, and anecdata.

The nap hierarchy – naps are probably in my top 5 list of work-from-home benefits.

  1. Early versions of NetNewsWire and Userland Radio notwithstanding.

Top of Mind No. 2

How I work: what might “pairing” with a language model-based assistant (e.g. GPT-3) look like?

How I build: the tension between the web platform being more capable than ever versus the difficulty of standing up many kinds of “basic” applications. e.g. animation is better/more sophisticated than ever, but skipping ahead with building web/database applications requires expertise and a few hours to get something up and running.

How I collaborate: encouraging teams to work in issue threads, thereby improving the quality of thinking (via writing) and building ambient, asynchronous awareness amongst teammates.

Write more, coder inspiration, queryable coding environments

Simon Willison on writing about one’s work:

A tip for writing more: expand your definition of completing a project (any project, no matter how small) to include writing a blog post (or README or similar) that explains that project

Without this you’re skipping a relatively small step that unlocks a huge chunk of the value in the work that you have just completed!

This advice goes for internal company work too

I set up an internal blog at a previous employer using Confluence (because it was already available and has a good-enough blogging feature), but even something as simple as a dedicated Slack channel can work well for this purpose

And, writing more by lowering standards 😮

And as always: one big secret to writing more is to lower your standards

Published but “could have been better” is massively more valuable than something that eternally sits in your drafts

One of the biggest productivity improvements I ever made to my blogging was when I gave up on my desire to finish everything with a sparkling conclusion that ties together the whole post

Now I embrace abruptly ending when I’ve run out of things to say instead

Spoiler: I’m following this advice right now! 📈

Thorsten Ball collects greatest hits by Steve Yegge (who coincidentally just joined Sourcegraph):

And, on books/screencasts/blogs that have influenced him most as a programmer. A few that have influenced me too:

  • Destroy All Software
  • PeepCode Play by Play
  • Pragmatic Progammer
  • Practical Object-Oriented Design in Ruby
  • Agile Web Dev with Rails
  • Rands in Repose
  • Code Complete
  • 37signals’ books

Codebase as Database: Turning the IDE Inside Out with Datalog:

I’ve been wondering: what if this codebase model was as queryable as a database is? What new questions would we ask of our codebases, and what new ways would we find to visualize them? Furthermore, what if the language semantics themselves — types, completions, errors, etc — were specified as queries, which were also introspectable?

I believe that the design of languages and programming environments should not just be the province of a small priesthood of elite developers. Everyone should be able to look under the hood of their IDE, and be free to push its boundaries: embed it in a different context, create a domain-specific language with rich editor support, fork an existing language to play with its semantics, etc.

The opacity of the IDE’s inner model — and the rules by which that inner model is updated — are barriers to this being a reality. For IDEs to be introspectable and hackable, we must first expose this model and these rules: we must turn the IDE inside out.

Sign me up for queryable, malleable IDEs. I like RubyMine and JetBrains’ development products a lot. But, I often pine for the speed and low-ceremony extensibility of Sublime Text (or TextMate, back in the day). So let’s through “as easily queried as a database” on the pile while we’re at it. 😆

See also: Sourcegraph, language servers. (Someone in the back is yelling Lisp, the “Freebird!” of software development.) Furthermore, I wish Jetbrains’ MPS was less Java-centric and more tractable.

On Feeds: My History

Ted Leung recently noted his “blog-aversary”:http://www.sauria.com/blog/2009/01/09/blogaversary/. This reminded me that I’ve been reading feeds for 6-7 years. Shifting from reading centralized media like CNET, Infoworld and even Slashdot to individuals like “Matt Webb”:http://interconnected.org/home/, “Brent Simmons”:http://inessential.com/ and “Simon Willison”:http://simonwillison.net/ was an important event. For me, it was one of those moments where you realize there’s a whole other world of cool stuff to discover, explore and take part in. Certainly I would have a completely different character if I hadn’t discovered people out there on the web, doing their own cool stuff.

When I first started reading feeds, I experimented with some Linux stuff, most notably the crazy “AmphetaDesk”:http://www.disobey.com/amphetadesk/. I quickly settled into loving “NetNewsWire”:http://ranchero.com/. It was the first app I purchased when I got a Mac, and I still use it every day, to this day. Call me a feed reading curmudgeon, but I still think it’s the best way to keep up with lots of sites.

I’ve gone through some shifts in the kinds of feeds I read. I discovered feeds and blogging by “Dave Winer”:http://scripting.com, so I started reading him and the people in his sphere of influence. I quickly figured out that said sphere is an odd social environment that has little relevance to what I do as a developer. For a while, I subscribed to the “must read” influencers, such as Boing Boing. I quickly found that firehose was too strong and, again, not relevant enough.

So instead of trying to figure those worlds out, I started reading more coders. Somehow that lead from reading people who do front-end coding to reading design stuff, which proved quite interesting. These days I’ve been subscribing to people writing about “information design”:http://konigi.com, “visualization”:http://www.flight404.com/blog, “open source hardware”:http://tinker.it/now, “game criticism”:http://www.rockpapershotgun.com and “urban design”:http://bldgblog.blogspot.com/. I’m finding lots of awesome there.

Read slightly less, practice slightly more

Chris Wanswrath, a smart and distinguished fellow, advises us to burn our news readers and just “hear it through the grapevine.” But how far can one go with that?

For myself, reading feeds gets me a few things:

* Aesthetic where I have none. Feeds like BLDGBLOG and Coudal point me to things that make me better at what I do, in a tangential way, and a more interesting person. These are things that otherwise I wouldn’t know where to start.

* Awareness on the edges. Reading folks like Simon Willison or Jason Kottke make sure that interesting topics in programming or erudition don’t go unseen even though I am focused on that topic.

* Aggregation of ideas. This cuts two ways. Most people worth reading compress a bunch of different sources down to a manageable stream. This gives me more bang for the buck in my feed reading time. On the other hand, if a link is mentioned several times in the aggregate of feeds I subscribe to, then its probably worth checking out.

I can see how following interesting folks on Twitter and reading aggregators occasionally can you get you some of this, but not all of it. With sources like Reddit or Hacker News, signal to noise is a problem – you can’t control who posts what. Some people have a lot of extra angst and/or spare time. Which is also the other side of the Twitter story. Some people are great to read, but a pain to put up with at times. So it goes.

When Chris’ essay first hit the wires, I was tempted to adopt his ways. But, I think I’m pretty good at ignoring the need to unbold things and cut down to business. What has proved immensely useful to me was has encouragement to just code all the time and make lots of stuff. I’m just getting started with this, but already I’m liking the increased feeling of accomplishment.

Regardless, we could all probably stand to trim our feed lists and hunker down on our projects, no?

Microsoft's spin on memcached

Microsoft cargo cults memcached! , via Simon Willison.

Back when I worked in a semi-.NET shop, we needed to cache some pretty expensive operations somewhere. In memory would have been ideal, but we had no way to coordinate between application servers. It ended up going in the database, because that made everyone feel safe. In hindsight, it probably wasn’t the greatest idea.

Long story short, my internal clock that tells me how long it will take Microsoft to clone a forehead-slappingly-obvious-idea is well set.