A tale of Ghosts’n Goblins’n Crocodiles

There is something noble about developing on a dead platform – it is so completely for the joy of the development, without any commercial motivation.

  • John Carmack

When does a platform truly “dies”? A “dead language” is defined as “a language which is no longer in everyday spoken use”. By analogy, a dead platform would die not when it ceases to be profitable or when it is obsolete, but when people stop playing it and caring about it.

Now the question becomes “what draws people to retro-computing?”. Is it nostalgia, the diversity, the creativity, the simplicity, or is it inexplicably fun?

Come for the sentiment, stay for the backstory of an old computer you may have never even known existed.


The possibility of software through the ages

The gestalt of what's new in software and how it's changing our world has evolved over the decades.

In the ‘90s, it was “don’t make me think!”. User interfaces went from text-based systems that required memorization and expertise to graphical systems that afforded more casual use of computers. Unix users and their terminals are a notable holdout to this day.

In the ‘00s, it was “don’t make me remember!”. The internet let us to stop worrying about access to common knowledge. Search engines, news feeds, e-commerce, and listing sites made it pretty easy to answer many questions without a resident expert. Nascent social platforms made it possible for our “friends” to feed this information back to us. Notable holdouts: it was impossible for me to search for punchlines from SNL skits, and largely still is.

In the ‘10s, it was “don’t make me describe the content I want to see!”. The now-giant tech companies figured out that their products were more “engaging” if they pushed content to people instead of people clicking around and typing queries to describe what they want. Thus was born machine learning, recommendation systems, and infinite/algorithmic feed scrolling. Notable holdout: none, the blast radius of ad-tech is wide and far-reaching.

From this particular moment, it seems like the ‘20s are going to be “don’t make me leave my enclave”. Even if there’s a breakthrough in medicine and this pandemic is a temporary blip, the writing seems like it’s on the wall. Many kinds of service and retail commerce we used to go out into the world to interact with, along with offices, are going to fade away as climate changes and viruses come and go. Notable holdout: the not-so-middle class folks who do the machine's bidding and keep the wheels of commerce rolling.


Over three decades, things are at once noticeably better and yet there's vast room for improvement. If you're wondering where impactful work can be done in technology, it's in making the benefits of the technology we're building for the middle/upper classes today available to the less fortunate tomorrow. If we can make fantastic televisions available to everyone, surely we can improve the outcomes that matter most in everyone's lives.

If we could bend this curve, the '20s could be the decade of "no pithy quote, just people helping their neighbors."


Yin and Yang: Lessons of Creativity — David Perell

Flow states are the holy grail of productivity. To achieve flow, we need a proper skill-challenge ratio. Skill: Yin (Order) Challenge: Yang (Chaos) We do best when we’re pursuing goals that are a little bit tougher than what we can easily accomplish.

A little bit of disorder makes many things better!


Dear Apple Music algorithms,

The center item is not at all like the others.

Album covers of J-Dilla, Madlib, Shaquille O’Neal, Big Krit, Slum Village

H.264 is Magic. There’s so much amazing stuff you can do with math in the pursuit of distinctly non-math-y endeavors. I’ve always thought compilers, and their cousins the query optimizer, are magic. Computer graphics too. Turns out video compression is also uniquely amazing.


Bonus quote from Revenge of the Intuitive:

Years ago I realized that the recording studio was becoming a musical instrument. I even lectured about it, proclaiming that “by turning sound into malleable material, studios invite you to construct new worlds of sounds as painters construct worlds of form and color.” I was thrilled at how people were using studios to make music that otherwise simply could not exist. Studios opened up possibilities. But now I’m struck by the insidious, computer-driven tendency to take things out of the domain of muscular activity and put them into the domain of mental activity.

I am, in general, a sucker for the notion of the studio as a kind of musical instrument unto itself. It’s a very maximalist, Romantic-era symphony sort of thinking. I want to be Pet Sounds-era Brian Wilson or Rite of Spring-era Stravinksy when I grow up.


The Revenge of the Intuitive and developer tools in 2020

The Revenge of the Intuitive - Brian Eno lamented the downsides of a modern, computer-based recording console. Twenty years ago! The trade-offs for “freedom” at the expense of human affordances were too much for Eno at the time.

Feels like we’re in a similar spot with developer tooling. It works for the most accomplished and persistent of us. For many people who would like to build software, it’s too much. It’s too easy for our castles of complexity to thwart the novices.

The trouble begins with a design philosophy that equates “more options” with “greater freedom.” Designers struggle endlessly with a problem that is almost nonexistent for users: “How do we pack the maximum number of options into the minimum space and price?” In my experience, the instruments and tools that endure (because they are loved by their users) have limited options

You could just as easily write this today about software development libraries and tools. Too many of them discard pretty good ideas about how to build applications. Too much fascination with meta-tooling. Not enough thought put into how to put applications in people’s hands.

With tools, we crave intimacy. This appetite for emotional resonance explains why users - when given a choice - prefer deep rapport over endless options. You can’t have a relationship with a device whose limits are unknown to you, because without limits it keeps becoming something else.

We need standalone tools and libraries to build upon. However, well-curated, opinionated developers tools are where the magic happens. Frameworks like Rails, Tailwind, Next.js are where the leverage is.

A determined expert can build an application from building blocks. Novices can at least get started with a well-crafted framework. A good community and forgiving documentation can get them through the valleys of confusion to the peaks of accomplishment.

Perhaps low/no-code tools will bring the benefit of the “golden, narrow path” to more people. Maybe the trade-winds of developer tooling will blow away from showmanship back to accessibility. Either way, we should tidy up our house and make software development more welcoming to those who aren’t already monks in the monastery.



They say never let a good crisis go to waste

We should use the pandemic to reevaluate how we value service, child care, and education labor. It’s apparent we undervalued them. Their value is now explicit for those clamoring for a return to paying people to handle their chores and obligations. So let’s pay them more when we emerge from this!

The burden of navigating urban sprawl to reach our offices, shops, and entertainment is now explicit. Density won’t be the answer for this is in the short or medium term. Perhaps we could value the ease by which we can drive around right now and work backwards from there.

The bit that has worried me is how density is no longer a virtue. Public transport and dense neighborhoods won’t be desirable for a while. What’s the alternative that reduces our environmental toll and increases the cohesion of our neighborhoods?


“Building quality things of substance takes time.” - Rands in Repose, One Thing


Why NetNewsWire Is Fast - I love it when Brent Simmons writes about system design and principles.


One strong center and two senses stimulated

I rented a 12-year old Porsche Boxster via Turo this weekend. Good app, great car. I’m shopping older German convertibles for my next car. Paying a little to rent a prospective car for a day is way better than driving one for less than an hour. Plus, no sales tactics!

I swear this isn’t a headshot for a TV show set in an era where masculine pastels are Extremely The Thing.

The center of the Boxster experience, it turns out, is the tachometer and the engine. The tachometer is dead-center, set in distinctly-Porsche numerals with a digital speedometer in the bottom. You don’t want any other gauges. It’s nice to know when you’re about to run out of fuel, I suppose.

2008 Porsche Boxster speedometer and tachometer

The flat-six cylinder engine sits right behind your shoulders. It is, according to my wife, loud. I found it sonorous. I don’t have a picture of it because you literally can’t see it without taking the car apart. And, a picture of a dirty machine with 130,000 miles isn’t right. The engine on a Porsche is meant, and designed, to be heard.

Once I was between that tachometer and engine, I knew I was definitely in a Porsche Bubble. The switches, seats, even entertainment system didn’t matter much. It helped that it was a lovely day and the air conditioner was up to the challenge. But it’s all auxiliary to the sights and sounds.

Turns out, that’s sort of all you need. A strong design center and two senses stimulated can make a product that stands the test of a decade or three.


Tools for plain-text thinking

Margin is a plain text notation for thinking in lists, notes, and structured data. I have a soft spot for notations for thinking like, e.g. Markdown, TaskPaper, even bullet journaling.

The mark of a nicely designed plain text format is that it works equally well in a well-crafted app, a text editor, and on a sheet of paper. Margin meets that criteria.



The Bremont Argonaut - there’s a lot of “ink” on this watch face, but it doesn’t seem busy. Even more, the marks on the crowns are the real winners.

![https://hodinkee.imgix.net/uploads/images/1586281720176-9qegaqjnjs7-0243d3e3c71e5244dc4c03c63b5282cd/L1180502.jpg?ixlib=rails-1.1.0&fm=jpg&q=55&auto=format&usm=12&ch=Width%2CDPR%2CSave-Data&fit=crop&w=820](Bremont Argonaut crowns)


The second best sunset of the week (Monday)


Manage for time and mental burden

Features in software are answers to questions. How can customers send what they're looking at to someone else? That's share via email. How can customers distill all the data about my project's tasks down to raw data to analyze it? That's a report, probably with a CSV export.

All of these answers exist on some kind of spectrum. There are simplistic and sophisticated answers. Maybe reporting has no interaction affordances at all; it's an HTML table and a link to download it as a CSV. Perhaps reporting is full of interactions, using metaphors of spreadsheets like sorting or filtering.

It hurts to waste time and effort. We get attached to the things we work on. But that’s the Sunk Cost Fallacy talking. If you don’t think a feature is worth the time it takes to make it great, then it is not rational to ship a crappier version simply because you have sunk time into it.

Julie Zhou, How to Make Things High-Quality

Early in the development of a feature is the time to seriously consider whether to ship the simplistic or sophisticated version of the feature. Before Sunk Cost starts to weigh on our souls. The first few days of building the feature are often about figuring out how much sophistication we can afford to build given the amount of time we have to ship the feature.

It is tempting to stop when it works, but it is only the beginning. That’s the shitty first draft you’d never turn in. Now you must go through the process to make it as simple as possible for others to understand.

Simon Hørup Eskildsen, Shitty First Software Drafts

In a sense, we’re matching a time budget to a mental complexity budget. In one week, we could figure out how to do a very simplistic CSV export. We could get it to work, make the implementation clear, test it out, iterate on code review, and have it ready to ship. In four weeks, we could add all the features that make a crisp and clear customer feature: generating it in the background, emailing a link to download the CSV after its generated, showing progress of the export to a user, etc.

With the teams I work with, we operate with the idea of peak complexity: the time at which a project reaches its highest complexity. Peak complexity has proved a useful mental model to us for reasoning about complexity. It helps inform decisions about when to step back and refactor, how many people should be working on the project at a given point in time, and how we should structure the project.

Simon Hørup Eskildsen, Peak Complexity

Somewhere in the middle of the time allotted to the project, a feature might start to feel like its getting out of hand. Inevitably, there's some surprise complexity or scope that no one anticipated. If the code of the feature were a combustion engine, it is sitting on a stand, partially disassembled, and in need of a rebuilt component.

Maybe we decide that the surprise scope isn't worth the toil and scrap part of the feature. We might decide it is essential and scrap some other part of the feature so we can finish this while affording the time and complexity budget.

Eventually you reach a point where there aren’t any more unsolved problems. That’s like standing at the top of the hill. You can see clearly all the way down the other side. Then the downhill phase is just about execution.

Basecamp Hill Charts

We reach that Peak Complexity, decide how to get through it, and start working downhill. We're now reaping the benefits of the thought and effort we put into managing the complexity budget of the feature, given the our time budget. We're crossing t's and dotting i's, finishing detail work, and getting the project ready to ship.

I find that managing software projects as time plus complexity works far better than viewing it as tasks for people to work on until it's "done".


AirPods as a Platform:

You could also think about the Apple Watch as the main input device. In contrast to the AirPods, Apple opened the Watch for developers from the start, but it hasn’t really seen much success as a platform. Perhaps a combination of Watch and AirPods has a better chance of creating an ecosystem with its own unique applications?

Bingo.


Graphs are the new hierarchies

In the sense that trees of people (managers and reports, ala Taylorism) are the old guard. Data (folders and files) are old sauce and nodes + edges are new sauce.

In the sense that part of the confusion of our modern world is that e.g. the Koch brothers have considerable influence on how the Republican party organizes itself. Thus, money is the speech that organizes our current regime and acts on policy. But the Koch brothers aren’t on the org chart for the government or the Republican party.

In the sense that hierarchical databases are such old sauce that I’ve never used one. People new to software development don’t even realize they were at one time a thing that competed against the idea of relational databases.

In the sense that writing is linear or organized by chapters in books. But, the web is a wild mess of hyperlinked graphs. Maybe writers want to organize by graphs too!

(Spoiler: you can represent strictly hierarchical data with graphs too!)