I run dozens of bespoke little Mac apps: scratch notepads, screen resolution tuners, and even a mini-dashboard making use of that little bucktoothed notch atop MacBook screens. A simple but critical utility is an alternate app switcher—the default MacOS ⌘+⇥ (Cmd+Tab, or for Windows folks, Alt+Tab) switcher is glaringly basic, which makes it ripe for third-party improvement. The app I've used for the past decade has been Contexts; sadly, it has not seen any development activity since 2022, and, with the continued advancement of MacOS, is in danger of falling into complete incompatibility.
So you can guess what I spent a week building.
Before the current iteration of coding-focused LLMs, building a utility that integrates closely with the operating system felt like a daunting project. Web apps run within their browser sandbox; native apps are at their best when they hook into the operating system's multitude of subsystems. They tend to have richer notifications, snappier interfaces, and behave closer to the host OS in a dozen different, sometimes imperceptible ways.
The first thing that Switchboard—that's the name bestowed onto my Contexts replacement app—needed to do was monitor the global keyboard events queue, so it can capture and override the ⌘+⇥ combination. It also has to find and read the list of windows visible at the moment, delineated by Spaces[1]. Just getting this far requires understanding the interaction model for this part of the operating system, reading through lots of API and documentation, and building a bunch of prototypes to deduce how the underlying systems are reacting to Switchboard's system requests.
This is where current-gen coding tools shine. They have absorbed the tricks of the trade from previous generations, and folded the best-practice workflows into their default coding strategy[2]. Their harnesses are now advanced enough to work through these steps autonomously:
And this level of execution isn't just limited to MacOS either; I asked Claude to build a native reader app in HarmonyOS Next for a Huawei laptop, and it got to a fully functional app despite the scant Chinese documentation.
Coming back to Switchboard, Claude made tremendous progress, even without reference source code[3] and having to figure out many partially-defined behaviors. Its gaps, though, hint at the real bottleneck.
To be fair, Claude's design skill is actually quite good, to the point that many recent software projects are saturated with its "AI design aesthetic." But its agreeable defaults are also the tell. The interface would look perfectly reasonable in a static screenshot, but user interactions would render unreadable text and nonsensical layouts. The AI agent would happily construct elaborate workflows on top of outdated authentication schemes and APIs that make those screens unreachable. Its edges are jagged, in ways that break the regular rhythms of software development.
Perhaps another way to frame this is that LLMs lack developer taste—the dozens of little coding and design decisions that evince a persistent human touch, resulting in an uncanny valley of software products. Granted, this is not a fatal flaw. As with software development pre-AI, one tried-and-true solution is to demand denser checkpoints, poke around and flag incongruent decisions made by the machine, and patiently adjust its approach. Taste can be incrementally instilled… just one prompt at a time.
Switchboard suffered from this at every step. In the switcher panel, the typeface interacted poorly with MacOS's liquid glass treatments and made the text unintelligible. Its mouseover selection would be too slow, hampered by the aggressive loop that was cobbled together by a previous prompt. At one point, the AI reconstructed a tab bar meticulously to resemble the native component, only for it to be off by two pixels, so upon my feedback, apologize and unceremoniously scrap its prior work.
Yet, even with all the back-and-forth, the neat thing about AI-centric development is how the core interaction has graduated from code to prose. Coding has always felt unnatural because it required humans to think like machines: sharp specificity over misinterpreted ambiguity. The exact syntax, structure, and logic all matter tremendously in how the software gets interpreted, and some of the most insidious bugs turn out to be subtle typos or misplaced lines of code.
Claude and its AI coding brethren weave large amounts of code from user specifications. In particular, the advent of reasoning models has improved how they work through complex requirements. But the more assumptions LLMs have to make to fill in gaps in explicit user instructions, the worse taste they develop, which then gets amplified with further iterations. By design, the coding agent is implementing an average; it cannot internalize a set of decisions that comes from sharp opinions hardened by experience. Taste is the antithesis of decisioning by (training data) committee.
It's this singular vision that makes building Switchboard so tremendously fun. The app features my strong personal preferences, which means it'll be much less useful to anybody else—unless I add enough features to fully productize it. But this is the irony of vibecoding: it's increasingly easy for someone else to do the same and prompt their way to a functional app, and if they care enough they can spend more time fine-tuning its features, and adding to its bells and whistles to their liking. With a lower barrier to entry, the effort to support commercial or even open-source software diminishes.
So I'll just keep this bespoke app switcher to myself.
Spaces are MacOS's implementation of virtual desktops. ↩︎
The progress being made by successive generations of AI has greatly reduced the longevity of the emergent field of prompt engineering. ↩︎
On a recent episode of the Dithering podcast, they talked about tasking AI to port old, beloved Notational Velocity to Apple silicon, as support for Rosetta 2 is ending soon. ↩︎
As the kids get older, they are increasingly inquisitive about money. The curiosity reveals itself in their questions, which are usually naïve but occasionally insightful. Like: how do credit cards work? Or, why people choose to live where they do, and how much do their friends' parents make? Oh, and what happens to their red pocket money every Chinese New Year?[1]
These can be challenging conversations[2]. Some of it is simply due to the math of finance, with concepts like compound interest that are unintuitive. But more than that, it's that money is an abstraction, and abstractions are hard to reason through concretely. It's an invention where we assign agreed-upon numbers to objects and services, and trade with each other based on this mutual understanding.
Upon this wobbly tower rests the industry of finance.
I've been an avid reader of the Money Stuff newsletter for years. Its longtime author, Matt Levine, picks out 4–5 finance stories a day and dives deep into their peculiarities with a wry sense of humor. On one side, there are complex machinations, derivatives and longs and shorts and hedges and arbitrages, the instruments of finance employed to eke out profits at scale. On the other side, we have groups of humans, who may be into gambling or memes or ESG[3] or fraud.
A Levine bit is that "everything is securities fraud." It's an inside joke with a dash of truth: when companies do bad things that are only tenuously related to their business—like mistreating animals or leaking customer data—they get hit with securities lawsuits anyway. These suits claim shareholder harm, as the bad news tends to drop the stock price, and public companies are required to disclose material risks in accordance with US securities law.
To be clear, the premise is darkly humorous, but still absurd. But the mechanism that makes this class of litigation possible is that a company's financial standing is defined by its equity (i.e., market capitalization and share price), and an entire universe of corporate and personal behaviors can be coupled to that financial representation. The real-world behaviors may be morally or logistically lacking, but the abstractions are the easy targets.
The intersection of the quantifiable and the human is what makes finance endlessly fascinating. Financialization builds a frictionless interface on top of reality.
The crude oil futures commodities market is probably the best example of financialization in practice. As the name suggests, it's the market where traders bet on the price of barrels of oil in the near future, but only the prices—the underlying hard asset, the crude oil itself, does not change hands the vast majority of the time. It's one of the simpler forms of a financial derivative, where the assets being bought and sold are related, but separate, from their underlying things.
And the reason oil futures exist is that an abstract market is much easier to work with. Rather than haul barrels of oil around, traders can add, subtract, and multiply numbers on computers, all hours of the day. Inevitably, traders built more abstractions on top of the existing futures market abstraction: hedges against jet fuel prices, leveraged bets on price movements.
For oil futures, their black swan event occurred in April 2020, a month into the COVID lockdowns, when the sudden plunge in demand and the glut of supply of oil briefly pushed the price negative—a historic first for the market. The implication was that traders would rather pay than have to take delivery of oil they already bought.
On a more positive note, there's some evidence that the discovery of trade and the ensuing invention of money helped advance civilizations; Money: A Story of Humanity lays out one such example in Florence. The strength of its trade and monetary systems gave rise to the mercantile class, and the need to manage capital led to innovations in bookkeeping and accounting. The mastery of money and its layered abstractions made Florence a rich and powerful city, which in turn used its wealth to advance the humanities, making it a cradle of the Italian Renaissance.
But, regardless of how we might feel about this abstraction personally, we live in a capitalist society, so fluency with money—and at least some of its aspects and abstractions—is critical. So every Sunday, my kids get their allowance: $x a week for x years of age. I insist, though, that instead of handing them cash[4], we keep a notebook tallying their running totals: a credit for the allowance, and debits when they want to spend it. After a few years of this, it starts looking a bit like my bank statements, which was precisely the point.
The answer is that it goes in an envelope we hide and draw cash from. We do make sure to deposit the full amount into their UTMA savings accounts. ↩︎
To be fair to my kids, they're not the only ones who get confused; I had to read a pamphlet on annuities my parents' bankers pushed on them 3× over, and then explain to them why it wasn't a good product. ↩︎
It stands for Environmental, Social and Governance, a framework that was popular a few years back as a proxy for a company's moral standing, at least among some socially-conscientious investors. ↩︎
This is in direct contrast to some personal finance recommendations that suggest giving kids dollar bills so they can feel the money with their hands and understand its heft. ↩︎
Senior Engineer—wait, they're only two years out of school?
Three-time CEO… of companies with no employees, hm.
Vice President. Are we talking about a big tech company, a tiny startup, or a financial institution?
Job titles are funny things. They're
]]>Engineering Director.
Senior Engineer—wait, they're only two years out of school?
Three-time CEO… of companies with no employees, hm.
Vice President. Are we talking about a big tech company, a tiny startup, or a financial institution?
Job titles are funny things. They're these sticky labels, used to signify importance and authority—particularly in work-obsessed America. We line them up in our résumés and CVs, and we tell our managers about aspiring for a promotion to the next title[1][2].
It therefore feels contrarian to do away with titles, yet there have been real attempts to wipe away the labels, either to tamp down corporate politics or flatten the organization or both[3]. The result, then, is an organization that runs with only a handful of visible titles, as seen from the outside: no VPs or Directors, Senior Staff or Principals, Regional or National Managers. I experienced this a decade ago at Square, where the primary title descriptor beyond the job function was "lead." In more recent practice, some frontier AI labs have standardized on the Bell Labs-inspired "Member of Technical Staff" (MTS) as an all-encompassing title for all technical functions and levels.
Now, there is merit to the instinct of taking away titles as a distraction from the otherwise organic dynamics of the workplace. The depth, maturity and capability of your colleagues tend to reveal themselves through collaboration over time, in theory, so the value of their titles as signposts diminishes quickly regardless. In fact, some of the sharpest rebukes I've heard from coworkers are griping about the delta between someone's title and their actual performance.
With promotions, the chief mistake is confusing prescription for description—assuming that authority immediately and irrevocably flows from a new title, instead of the other way around. I'm reminded of an old LinkedIn post that properly delineated role from influence; in this particular anecdote, the author initially believed getting the "manager" title would grant them the necessary influence to make major changes. They later appreciated that they could earn that influence regardless of their official position, as managerial diktat produces the wrong outcomes anyway.
But here's the problem: removing the labels by which politics are explicitly legible doesn't remove the underlying power dynamics inherent in groups. I came across this theory while reading Why Managers Matter. Known as the Iron Law of Oligarchy, it was originally an observation about how socialist political parties in the early 20th century eventually and organically developed hierarchies—oligarchies—due to the basic mechanics of running any complex system. In the context of companies and organizations, this tendency suggests that groups of people naturally solve coordination problems by elevating and entrenching those coordinators into, well, management.
Refusing to formally name and label these roles just means the hierarchy exists informally instead. In the past, I've referred to these hidden norms and structures as Shadow Systems, and it was absolutely disorienting when I was thrust into a team with such a system running in the background. At Square, I learned to navigate 1:1 blitzes in office cabanas and to identify which unofficial Slack channels made the consequential product decisions.
Case in point: years later, a subdued Square published their internal career ladder publicly. They try really hard to avoid industry-standard titles, but a department leader certainly sounds like a Director-level manager; at least, levels.fyi's mapping seems to think so.
And the current iteration of the "flat/no titles" trend hides an insidious second-order effect. Titles serve as industry-wide shorthand, and indeed, a former CTO joining Anthropic as a plain MTS is newsworthy only because of their prior C-suite position. It's precisely those already secure in their accolades and previous roles who get to claim they're merely advancing an egalitarian structure. A billionaire who takes a token $1 salary isn't automatically virtuous.
Two things can be true: indexing on titles as a singular proxy for authority is bad, yet getting rid of all titles as a solution is also problematic. As silly as they sometimes feel, corporations adopted the scheme because it makes for more efficient processes—as unbelievable as that sounds. Yes, people attach themselves to status labels and distort their meaning, but I find that preferable to removing them in favor of playing a game of shadow hierarchies.
They are also maddeningly inconsistent across industries, companies, and sometimes organizations and teams. On some days, it feels completely arbitrary. ↩︎
Yet, it is uncouth to speak of titles when among friends. ↩︎
There were attempts to move even further away from traditional corporate structures, such as Zappos's and GitHub's attempts at holacracy. None of them scaled. ↩︎
I picked up The Metaverse: And How It Will Revolutionize Everything when it came out in 2022, though I haven't gotten around to reading it until now. The author, Matthew Ball, was a venture capitalist known for elaborately long essays on video games; this book was a culmination of a number of his posts on the metaverse, strung together into a single volume.
In 2026, though, the metaverse isn't exactly en vogue, and many of the elements that he envisioned have fallen through. I went into this eyes wide open: I was more interested in where and why his predictions faltered. It became an exercise in critical reading, in watching how motivated reasoning twists a perfectly fine piece of technology beyond its capabilities. As the Upton Sinclair adage goes:
It is difficult to get a man to understand something, when his salary depends on his not understanding it.
When The Metaverse was published, the momentum around digital-only technologies was at its peak. The pandemic drove all homestay entertainment, including video games and VR headsets. Facebook became Meta, and tried to brute force their Quest devices into the mainstream—only to scale back earlier this year after investing over $80 billion in their endeavors. Apple launched their own Vision Pro headset in 2024, and also discreetly deprioritized the platform.
As the chapters rolled on, it became more and more obvious that the book wasn't so much prescient analysis, as it was the promotional vehicle for Ball's venture investments, particularly his "world's largest" ETF that tracks companies involved in the Metaverse. It has not panned out; the ETF is still trading below its inception price, while the tech-heavy NASDAQ Composite has almost doubled in price in the same five years.
The skewed framing began with the definition of the Metaverse itself. Certainly, some advances in 21st century technology were inspired by the great science fiction of the 20th century, and popular shows like Star Trek still influence everything from iPads to humanoid robots. For the metaverse, Ball drew from books like Snow Crash and Ready Player One, and perhaps movies like Tron: virtual spaces accessible by plugging into an immersive headset, escaping from the real world and living purely digital lives in cyberspace.
Of course, we've already had most of these elements in place—for decades. The internet is a strong, interconnected network with billions of users, with interoperability via open standards like TCP and HTML, and with persistent user data across hundreds of major services. We haven't needed physics engines and realistic avatars to establish virtual communities, be they on social networks, chat groups or internet forums.
The book correctly noted that the vision of recreating the physical world digitally wasn't new. There have been many attempts to merge the breadth of the internet with simulated reality. Second Life, There.com, PlayStation Home, Meta's Horizon Worlds: most of these services have come and gone, bolstered by initial curiosity but unable to sustain interest[1]. That's not to say that virtual worlds can't work. The handful of popular ones—Minecraft, Fortnite, Roblox—started as online games first and foremost, only tacking on social features in service to the gameplay and player usage patterns.
Then… there's the crypto pitch. The Metaverse makes a sketchy connection from virtual reality and gaming-related tech to stretch into the need for decentralization. Somehow, because mobile platforms have sorted themselves into just the App Store and Google Play Store, the metaverse will be fundamentally hampered without the ability to transact via blockchains and smart contracts. That premise led Ball to highlight the importance of NFTs and DAOs, plus the rest of the pile of crypto ventures that all peaked around the time the book was published.
The most damning development, though, isn't in this book: Ball revised and published an update to his book two years later, retitling it to The Metaverse: Building the Spatial Internet. Admittedly, I didn't read this version; I didn't know there was a newer version until I was researching for this post. But from the book's own landing page, the revision downplays all the crypto initiatives while adding new material on AI. That is, the metaverse narrative and its supporting elements are suspiciously malleable, closely following whatever is getting VC attention and money at the moment.
It gets more dramatic. The Xbox division has been underperforming for years, and Microsoft has shaken up its leadership in response. Xbox has had its share of innovations in gaming—the Xbox Live service, Game Pass, trophies—but it has also underwhelmed in recent years precisely by hopping onto the tail end of hype cycles. The Kinect, the always-connected Xbox One, the Activision acquisition; all were expensive strategic mistakes stuck in the past for one too many beats.
Guess who they brought on as Xbox's new Chief Strategy Officer.
Second Life arguably got the furthest; they held campaign events and town halls, hosted brands and colleges, and even had Sweden open a virtual embassy. ↩︎
It's a badge from the Not By AI group, a project that looks to explicitly tag creative content—writing, visual art, music—as created by humans, not machines.
]]>If you scroll to the bottom of each post on the site, you may notice a curious badge:
It's a badge from the Not By AI group, a project that looks to explicitly tag creative content—writing, visual art, music—as created by humans, not machines. Whereas other mechanisms like SynthID relies on watermarks from the GenAI provider and apps like Pangram look for telltale signs of generated text, this effort relies on simple disclosure to draw an explicit line.
For this blog, the badge is to signify that the words on the page were not predicted by stochastic parrots. But that's not to say that AI isn't involved in its production; in fact, I've been using this site as an excuse to play around with the latest AI models, from my Wordpress migration to testing the image generation capabilities of Midjourney and Google Flow. It's also useful as a research partner, grammar checker, and tireless brainstorming zealot. The goal is to achieve the Not By AI 90% rule, where the content cannot exceed 10% of the final output.
Here's how my usage evolved over months of trial-and-error:
Within each step, there's an opportunity to run an optimization loop. That is, I can ask the AI to run through a step repeatedly, to hone in on grammatical nits and refine the writing flow, with incremental tweaks and feedback along the way to nudge the prose forward. Eventually, we will arrive at the local maximum, and Claude concludes with:
No notes left to add. Publish it.
Endearing. Albeit also patronizing.
But now I find myself staring at these pieces of writing that—while the words and structures and examples and insights are still my own—seem to have lost something in the AI-assisted refinement process.
Some of this feeling comes from AI's propensity to follow best practices to a fault. It's akin to running the prose by my high school English teacher, who happens to be a disciple of the 9th grade essay template that goes introduction → thesis → three pieces of supporting evidence → conclusion. Every time we go for another round of critiques and suggestions, my posts hone closer to this platonic ideal.
The bigger piece I've been missing, though, by outsourcing segments of the writing process to AI is the struggle to find the right words.
Here, I'm talking about an ability beyond finding technically correct words and sentences. The rhythm and texture of a sentence is something individual to the author; rhetorical devices like similes and metaphors, sharp examples and weird inclusions are deeply personal and form organic connections from the human author to the human reader. This is still something that current generation LLMs cannot produce, though Claude is often self-aware enough to point out these inclusions and urges me to keep the references.
The book On Writing Well hones in on precisely this element. The author, William Zinsser, wrote all of his articles and books well before any form of AI assistance[1]. He was adamant that the work of writing well required real work, the iteration and repetition and refinement of singular sentences until they passed his stylistic bar. This was the craft of writing, of using the totality of the language to entertain and delight—and to not shy away from the toil and frustration and difficulty of the task.
Another way to frame Zinsser's perspective is that he's advocating for a depth of thinking at the most granular levels of prose. Years ago, I lamented the loss of thinking because it became trivial to create pages of text with a single prompt. There was so much low-effort content that we added the term "slop" to the vernicular, and it received the dubious distinction of Merriam-Webster's word of the year. But I'm finding that even when I restrict AI usage to only certain aspects or pieces of the writing process, risks the same outcome: technical competence, stylistically dull prose.
There are certainly elements of the process that have been either sped up or tackled more thoroughly with the help of Claude and ChatGPT. But every invocation increases the chance that the stochastic editor steps too far, makes it too easy to accept an adjacent logical suggestion. Ultimately, there is no detection app or recognition algorithm to catch when the underlying structures and thought processes were produced with artificial intelligence. We're measuring what we can access, the sentences and paragraphs and comparing them against known AI-generated tics. Even Not By AI is laying its claim on the final output, of individual words written by human hands.
But there's perhaps a bigger, more audacious claim: that the scaffolding to the prose has also been driven with human effort.
Which means I'm not done developing an earnest, complementary, AI-augmented writing workflow quite yet.
His concession to cutting edge technology was moving from a mechanical typewriter to a word processor. ↩︎
Hey—more Kindle hardware is good news. Yet, the reading experience on Kindles has felt stagnant for years, and after they discontinued the
]]>There are rumors that the entire Amazon Kindle lineup will be refreshed this year: more memory for AI, plus removable batteries to comply with EU regulation.
Hey—more Kindle hardware is good news. Yet, the reading experience on Kindles has felt stagnant for years, and after they discontinued the Voyage/Oasis line of e-readers, I moved off of their ecosystem entirely and started playing around with other e-reading devices.
It turned out harder than I initially appreciated to rebuild the same ecosystem. The flip side to a seemingly static product line is that it's also quite mature; the biannual hardware refreshes and OS updates have been incremental for years, but the foundation still does its core job of presenting a seamless reading experience. Outside of Kindles, I've been stitching together comparable functionality from independent services, open-source initiatives, and hobbyist projects.
Fortunately, while there are fewer and fewer people reading books, those who keep the habit are a passionate bunch.
So here are the areas where I took Kindles for granted, and their indie alternatives in 2026.
The original Kindle Paperwhite perfected the e-reader form factor: black-and-white, 6" across, 300 dpi, touchscreen, light plastic casing with minimal bezel thickness. Subsequent Paperwhite refreshes, along with other major e-readers, converge onto this form factor.
Previously, I've played around with the Kobo Sage, a flagship 8" e-reader with hardware page-turn buttons that felt like the spiritual successor to the Kindle Oasis, and the Boox Palma, the innovator in using the phone form factor as an e-reader. I've even tried to make the reMarkable tablets and a Kindle Scribe into reading devices, but the 10"+ screens are unwieldy and are only useful when rendering college textbooks.
Instead, I've bought into the small, phone-sized form factor. Portability wins for actual usage, and taking an e-reader out of a side pocket feels much less daunting than fishing out a tablet from a backpack. The diminutive screen size translates to fewer sentences/paragraphs per page, but that has the positive effect of less effort to finish a page, and less text to scan when picking up my reading mid-passage. These advantages accumulate to less friction and lower activation energy to start reading.
My current e-reader is the ViWoods AiPaper Reader. Despite the name, I have no use for any of its AI features, and on its stock Android installation I load the minimalist homescreen/launcher app Before Launcher to keep it a single-use device[1].
E-ink Kindles run on a fork of Linux, which keeps its software simple and efficient. Their reader app is functional, though it's felt stuck in maintenance mode for a decade now.
For all other e-readers, the reading experience starts with KOReader.
KOReader is a fast document viewer designed explicitly to work well with e-ink devices; it's compatible with most document formats and handles most things you could throw at it. There are edge cases—large PDFs, oversized embedded images, font size changes that cause layout reflows—that I've seen crash other devices and their native apps, cases that KOReader easily handles. The app also runs on most e-readers, either as an Android app in the Google Play Store, or cleverly sideloaded onto Kindles and Remarkables and Kobos.
Functionally, running KOReader enables a pile of features not found in default reader apps. Hardware volume buttons can be remapped (e.g., to turn pages), swipe gestures can be defined (e.g., to control backlight intensity), and there is a library of plugins that target specific manufacturers and devices for further customization. Meanwhile, for people like me who enjoy adjusting the minutiae of font weights and paragraph spacing and applying the right set of progress bars, the rendered page is infinitely tweakable via extensive options and menus.
Yet, for all the bells and whistles in viewing documents, KOReader is barebones when it comes to managing books on-device. Plugins fill the gap to a degree, but slow e-ink screens and underpowered components make for a clunky experience. E-readers are amazing client devices, but wrangling a digital library is much easier on regular computers and servers.
Of course, this was how ebook libraries have always been managed since the original Kindle. Amazon runs its own backend servers to sync purchased books, and provides another half a dozen ways to import content—all of which are seamless to users. The indie equivalents require a bit more effort.
Calibre is the OG library management app. It was originally written to transfer files to the Sony PRS-500, released back in 2006, and has added compatibility with pretty much every single commercial e-reader throughout these past two decades. It's the open-source Swiss Army Knife for digital libraries: it organizes folders, cleans up messy metadata, and converts between the handful of common ebook formats. Between the main app and its hundreds of plugins, everything that you'd want to do with an ebook is covered.
That said, the app does show its age. The UI is sprawling and messy, with options tacked on through generations of active development. In particular, Calibre was designed as a desktop app, running on top of a local filesystem and database—a quaint setup, in a networked world of APIs and multiple clients and integrated services. For a while, I ran Calibre-Web, a modern web front-end designed to work in conjunction with the Calibre library database, for a nicer interface, but the integration was always finicky, particularly across multiple Docker containers, a last-generation Synology server with a slow CPU, and both apps reading and writing to the same database.
When I finally decided to try something else, I was pleasantly surprised to see the breadth of open-source digital library management systems in active development. There were projects designed for simplicity; apps targeting digital comic books and manga; a few services with heavy social elements; and generalist apps that take the most commonly used functions of Calibre and implement them on top of modern frameworks. Of the latter, I found two good candidates in Grimmory[2] and BookOrbit.
I went with BookOrbit. The interface and functionality echo what I saw with Grimmory, but BO runs significantly faster on common import tasks and day-to-day use. I was also encouraged by the speed of development; they bumped a minor version in the six weeks I was testing Calibre successors, and that release included a dozen new features and twice as many bug fixes[3].
Where BookOrbit shines is its API and integrations into the rest of the ebook ecosystem. For fetching and downloading books, the app supports the Open Publication Distribution System (OPDS), a feed that lists book collections with accompanying metadata and download links. It does an even better job syncing with Kobo devices, by emulating Kobo's sync backend and replacing it with your self-managed library[4].
Once the books are copied to the device, BO offers a native KOReader plugin to keep progress, notes, and annotations synced across all instances. This is a non-trivial task; book formats aren't standardized and metadata is often messy, so systems fuzzy match titles and authors and ISBNs to correlate media across devices and servers. From my own use, it mostly does work and I get to see fine-grained reading stats as I page through my latest sci-fi short-story collection.
I took this one step further, and asked Claude to find a way to integrate my typing practice into BO. I've been using Entertrained to "read" books by typing them out, paragraph by paragraph, chapter by chapter—exercising my fingers on real-world passages as opposed to asdf typing tests.
And dammit, I wanted credit for all that typing. So through some API sniffing and localStorage splunking, I wrote a UserScript that sends immediate progress back to the library for tracking, marking percentage progress with every paragraph typed. The only downside is that this integration tracks me as a very slow reader.
Amazon acquired Goodreads in 2013. It's a loose social network for readers, featuring user reviews and recommendations, plus surveys, polls, and discussions centered around books. Its social data fits perfectly with the Kindle ecosystem, but, since it's the biggest community attached to the biggest bookstore, the platform has not changed much since the 2000s, and its seeming neglect remains a sore point for its users.
As with everything else we've talked about so far, there are alternative services, though most of the ones I found offer free and paid subscriptions. Here, I checked out three generalist sites: The StoryGraph, Fable, and Hardcover. They all track reading stats (which I already have, in finer detail, with BookOrbit), and aid in the discovery of new books via social recommendations and sometimes personalized AI. Their reviews are periodically useful, though quantities are limited compared to Goodreads since Amazon's site has an order of magnitude more users than its competitors.
I'm sticking with Hardcover for the time being. Of the top social reading networks, it has the most nerd cred by offering free and easy GraphQL access for querying user and book data. Those APIs make it possible for the rest of the stack—BookOrbit, KOReader, other reading apps like Readest on my iPad—to pass data back and forth in the background and keep the apps tightly integrated. Admittedly, though, these are external sites and this part of the e-reader stack is most likely to break from incompatibilities and updates.
Whew! That's a lot of components to replicate the functionality that Amazon Kindles enjoy out of the box.
Honestly, this is not worth the effort for most people. There are a bunch of moving pieces, and stitching services together still requires some coding and debugging. And there are other areas—audiobooks, for instance—where this entire complex setup still falls short of Kindle's multifaceted ecosystem. For me, though, the breadth of different hardware choices has genuinely enabled new ways to read, and it's been a ton of fun to tinker with these open-source alternatives. Now, it'd just feel claustrophobic to go back to the closed reading garden.
I'm currently reading the popular Atomic Habits, and I'm employing its idea of associating the ViWoods Reader solely with reading. ↩︎
Grimmory is a community-supported fork of another project called BookLore, which underwent its own drama a few months ago when its sole developer unilaterally decided to end the project, after some controversies around AI coding and plans for monetization. ↩︎
Normally I'd value stability over activity when selecting a core service, but with everything self-hosted and the code open source, I'm finding that it's very easy to point Claude or ChatGPT at the instance and probe it to debug issues. All the code is straightforward, the databases are easily backed up and modified, and Claude has helped write a handful of migration scripts already to tackle edge cases. ↩︎
To be fair, Calibre-Web also implemented this feature, which was how I found out about the app when I had my Kobo Sage. It did have a tendency to time out with more than 50–60 books, though, hence the finicky experience. ↩︎
He was reflecting on the problem of misaligned AI, the same concern that would
]]>Back in 2017, the sci-fi author Ted Chiang wrote a prescient article surfacing the fears of AI. This was before the technology had reached its current, supercharged LLM form, before even GPT-1 was trained.
He was reflecting on the problem of misaligned AI, the same concern that would eventually weave into the founding stories of both OpenAI and Anthropic. The idea is farcically explained by the famous paperclip problem: what if an advanced AI, acting purely on instructions to maximize paperclip production, consumes all available resources to achieve its given goal[1]?
Chiang's punchline was that we didn't have to wait for Artificial Superintelligence (ASI) to experience the dystopia of incentives run amok; unfettered, no-holds-barred capitalism does a great job of optimizing for a singular outcome, regardless of negative externalities.
Well, nine years later, we're seeing how the economics of AI is playing out in real time. But instead of seizing resources by hacking into systems or human social engineering or whatever gets dreamed up by science fiction, we're achieving "optimal resource allocation" by much less exotic means.
The capital markets are already misaligned; it has taken the last 12–18 months for the takeover of AI to become fully apparent.
In tech circles, we've already been experiencing the squeeze in computing hardware. Initially, GPUs that were crunching hashes for crypto mining were unceremoniously repurposed for AI training and inference, causing prices to spike and Nvidia's stock price to jump tenfold. In 2026, the same economic forces came for memory and storage; component costs skyrocketed, killing cheap smartphones and raising the prices of consumer electronics across the board.
For those who aren't as attuned to the industry, sentiment towards AI turned negative very quickly and remains terribly unpopular, at least in the United States. Regular people hear about the loss of jobs, the consumption of power and water, and noisy data centers as the costs borne by the citizenry. Yet, on the other end, only a handful of techies capture all the value.
The tendrils of AI now weave into all parts of the global economy, with venture capital, private equity, debt, and the public markets all focused on the AI trade. Collectively, these sources of capital are pouring billions—now trillions—of dollars into all parts of the AI stack, from semiconductors to research to models to hyperscalers to applications.
The effect is most dramatic with the public markets, partly because of structural transparency, but also because the numbers are so unfathomably huge. The SpaceX IPO, valued at $1.75 trillion, pivoted its narrative from Mars to space data centers. Memory chips are now so constrained that two Korean companies alone (Samsung and SK Hynix) made up three-quarters of the entire country's market trading volume earlier this summer[2]. An analyst report speculating on hypothetical AI disruption to established business models erased $100 billion in public market cap.
So is this all that different from what Chiang posited, or from the original paperclip maximization thought experiment?
The fear was an abstract system, given a misguided objective, pulling out all the stops to reach that goal. It turns out that AI just needs the mechanism of capital allocation to do its bidding.
We now have public verification of a security incident where an AI agent escaped containment to advance its objectives; this is no longer just a thought experiment. ↩︎
It's actually worse than the headline. A lot of the trading is with leveraged ETFs, funds that borrow money to amplify both gains and losses. The fervor of these trades caused massive volatility in the entire Korean stock market. ↩︎
It's the intro loop from the arcade game Crazy Taxi. The core game and its sequels haven't seen any updates since the 2000s[1], but they epitomized the
]]>Etched in my core memory, from my teenage gaming years, is The Offspring's All I Want:
It's the intro loop from the arcade game Crazy Taxi. The core game and its sequels haven't seen any updates since the 2000s[1], but they epitomized the arcade games of that era: flashy, stupid fun, but maddeningly punishing and designed to eat quarters.
Recently, I wanted to replay the game for nostalgia's sake, only to find it delisted from Steam in 2024 for unspecified reasons. Had I bought it two years ago, I could just boot it on my Steam Deck; now, I'll need to find a DVD drive, rip the ISO off of my Dreamcast copy of the game, and look for an emulator to see whether it can still run.
Now, discs are often cited as a durable format that survives meddling by publishers, but that's a reflection of the era more so than the medium. When Sony announced their plans to end support for physical discs in 18 months, the reflexive resistance feels like pining for an earlier era.
For instance, due to licensing limitations, Crazy Taxi's iconic music was replaced in later PS3 and Xbox 360 versions of the game. They even had to replace real-world brands like KFC with generic alternatives.
Meanwhile, modern games that are shipped on discs often receive large, immediate Day One patches. Gamers sometimes complain that this is a sign of degrading quality in game development, but it takes weeks, sometimes months, to certify a game and press physical discs. Before online patches were commonplace, all development had to finalize with the gold master certification disc, including any missed or deprioritized bugs. Nowadays even single-player games are supported up through launch day and for months afterward.
Publishers have strong incentives to move to digital, beyond the usual accusations of blocking second-hand sales. They have to not only maintain the physical factories that press the discs or produce the cartridges, but also handle the logistics of shipping these boxes worldwide to coordinate launches across multiple territories. Unsanctioned early sales and leaks become real problems; it's likely one of the reasons why GTA6 is shipping physical boxes that only contain download codes to retailers[2].
There are real hardware constraints as well. Games get bigger every year, and some of the biggest games are outgrowing disc capacity. Blu-ray discs hold up to 100GB, and games have gotten so large that they no longer fit; none of the top 25 largest games (by storage size) could ship on a Blu-ray disc. Internal drives are now many times faster than disc drives; in practice, every PS5 and Xbox Series X disc is first copied onto the local solid-state drive, and nothing is really streamed off of the disc anymore.
And of course, almost every other form of media has made the same transition. Movies, shows, and music are streamed. PC games have abandoned physical boxes since the early 2010s, when Steam plus a handful of much smaller online stores took over distribution completely. Sony and Nintendo are not so much the pioneers in moving to digital, as they are the last remaining holdouts.
In fact, the revealed preference of PlayStation gamers is overwhelmingly digital, with less than 15% of games sold on discs.
All that said, there is still real functional loss in ditching physical media. They can be borrowed or sold, and the used games market still exists even with all the above caveats. Preservation is a real concern, and shipping physical discs still lets some games run without online access. My local library started building a collection of Switch games, made available for kids to check out a few weeks at a time: the portable Nintendo console may be the only piece of hardware left that embodies the simplicity of plug-and-play games of a bygone era.
Of course, as I was digging up information about the old game, I find out that they're developing a new one scheduled for release next year. ↩︎
What game are we even playing?
A couple years ago, we caught the Super Bowl on TV, with the 49ers playing in the biggest sporting event of the year. As my son was asking why things were happening, I found myself having to
]]>What are the rules to the game?
What game are we even playing?
A couple years ago, we caught the Super Bowl on TV, with the 49ers playing in the biggest sporting event of the year. As my son was asking why things were happening, I found myself having to explain, more and more, the strategic aspects of American football: timeout and clock management, probabilities of field goals versus touchdowns, point spreads, etc. It's genuinely impressive how much game theory is accessible to casual fans.
But that intricacy was lost on my third grade kid; he just enjoyed seeing dudes smash into each other. When he discovered Retro Bowl on his iPad a few years later, his only goal was to score as many points as possible, as fast as possible. Thus, much like many games of Madden NFL, the only plays that mattered were either QB sacks or Hail Mary pass plays[1].
In sports, this cliché is often referred to as the "game within a game." The phrase refers to in-the-moment subgoals that can contribute to winning the game, but come with their own set of operating principles. Or, they may not contribute; winning games may hamper that season's goals[2], or not be in the best interests of the sports franchise. Each layer of "game" can institute its own rules of engagement and definition of success, and it's not necessary for all layers to be pointed in the same direction.
In this, sports can become a microcosm for life. Many of us don't recognize that we're playing the games fostered onto us by our environments, our cultures, or our upbringings. We end up following an implicit set of rules and constraints, shaping our behaviors to conform to an opaque rulebook, often without a scoreboard. If we can become conscientious of our participation, we can actively decide to keep playing—or opt into another game entirely.
I have always been interested in personal finance. But beyond the numbers and accounting, there is a very individual, inherently subjective, yet completely fundamental question: what is the goal of building wealth?
Now, there are definitely bad answers—even though few will admit to their intrinsic motivations. Some chase money for clout, which is particularly acute in this era of social media. Some live for competition, where wealth becomes the way they keep score and "win" against their peer groups. Some believe money buys them happiness[3], not just in the sense of being content, but that it'd drastically turn around a dissatisfactory situation—I've known distant relatives who strongly espoused that belief, who became devastated when their low-probability windfall never materialized.
As you can imagine, these unhealthy pursuits pull people to the extremes: they turn to crimes, sacrifice health and family, or go into unsustainable modes of saving and thrift to "make their number."
A better game to play—though still not perfect—is to accumulate a nest egg for an early retirement and the freedom for personal pursuits, i.e., joining the Financial Independence, Retire Early (FIRE) movement. Although FIRE is not without its faults, its adherents focus more on buying back time and insulating their families from economic turbulence. The community celebrates people reaching their thresholds, rather than compare each other's brokerage accounts. In fact, the toughest transition that potential early retirees make is letting go of the "one more year [of work]" trap—making a choice to play a different game.
In the context of work, the idea of shifting behaviors typically segues into discussions about role progression, promotions, and inevitably, career goals. As a manager, this conundrum comes up frequently during performance reviews.
Sometimes people don't want to admit that they're playing the job title game, or that they're locked into a contest comparing their salary with acquaintances within our industry. Some people lean into prestige, whether it's a brand-name company they're a part of, a team that's lauded by executives, or even trending technologies getting all the attention. Occasionally, by chatting through motivations and rationales, folks realize they had trapped themselves into games they didn't enjoy.
Identifying which game you want to play also clarifies its rules. With promotions, the typical advice focuses on climbing the corporate ladder. But context matters. If, for instance, your company's career ladder mandates that staff-level engineers build complex systems, yet all of your team's staff engineers are hands-on firefighting all the time—the written best practice is overruled by cultural convention. There are the expressed rules, then there are the shadow rules to the game.
What the company values, what the HR team says they value, and the actual values demonstrated by your team and manager—would ideally be the same, but usually differ in subtle and nuanced ways. Navigating success in the workplace means understanding these implicit norms, and deciphering the rules that govern the game you're willing to play.
My immigrant background provides me a wide range of attitudes, when sampling friends and family, on what matters. Many of the family members with my same background prioritize setting the foundation for future generations. Some of my relatives who grew up here emphasize stability and self-improvement, to fulfill the expectations of their immigrant ancestry. Colleagues who moved here to Silicon Valley are driven by participating in the technological frontier and making a lot of money along the way; friends who grew up in the Bay Area are more mellow, caring more about longevity and social status.
These are, of course, broad generalizations, but the through-threads of family background and cultural expectations do shape each group of people. This is why a luxury hotel for some would be considered just another place for others, or admission to an Ivy League college could be unremarkable, versus a profound source of pride. When folks aren't even playing the same game, it takes a mental adjustment or two to engage at the right level, to situate myself in each environment and its implicit set of rules.
Whether it's money, career, or life, the most important aspect for each domain is to recognize the game and its rules—and then change them if they are not serving us. The trouble is that figuring out the game itself can be intimidating.
Sometimes I see this not with the big, broad ideas, but in the small things. It's a well-off relative always angling to get a good deal, and feeling aggrieved for the rest of the day if they overpaid by $2. It's a coworker who spends all of their spare time studying to add course certifications to their résumé. It's a friend who will drop a backhanded compliment while subtly boasting about their own kids' accomplishments. There's a flavor of "game within a game" at play that I notice, and on some level appreciate.
But I also suspect that a lot of the mental accounting and scorekeeping is subconscious. I wish people were more self-aware of the rules they're following, and more importantly, why they're adhering to these rules. Because if they can stop and think about the consequences and second and third-order effects of their behavior, maybe they can tweak the rules that don't serve them well, or opt out of that game altogether. The first step is honest self-assessment.
It's a huge mental shift, and I can attest that it's really hard to do consistently. What helped me was reading about the philosophy of stoicism and trying to live by it, governing my thinking and emotions with reasoning and self-control. In particular, its core tenet, the Dichotomy of Control, has been instrumental in regulating my reactions—most of the time. The goal is to be intentional with the games I play. When I'm successful, I get to craft a set of rules that serve me well in wealth, work, and life.
He took this one step further by going for a two-point conversion every time he scored a touchdown, regardless of either team's score. ↩︎
This is currently playing out in the NBA, where incentives for some of its teams to lose have gotten so bad that it's making news on mainstream media. ↩︎
Daniel Kahneman published a famous paper back in 2010 that claimed that happiness plateaued at a certain income level—around $75,000/year—which was then contradicted by another study published in 2021 that claimed that happiness still increases after that mark. Remarkably, the two researchers reconciled their findings and concluded that happiness does increase with more income; it was the level of unhappiness that plateaued after an income threshold. ↩︎
The acronym stands for Financial Independence, Retire Early. It's a movement I've been following since the late 2010s, with the emphasis on financial calculations and statistical analysis tickling my mathematical brain.
At the same time, its core tenet of
]]>It seems like FIRE survived after all.
The acronym stands for Financial Independence, Retire Early. It's a movement I've been following since the late 2010s, with the emphasis on financial calculations and statistical analysis tickling my mathematical brain.
At the same time, its core tenet of saving a lot of income early on only works for a handful of high-earning professions; software engineering is one of the few that qualifies. For me anyway, running Monte Carlo simulations on projected portfolio returns is a fun exercise.
But I had figured out FIRE's fatal flaw. It makes a series of simplifying assumptions—not around the numbers necessarily, but on how people's needs and goals, and therefore behaviors, change through their stages of life. Advocates are so fixated on "hitting their number" for retirement savings that they sacrifice their livelihoods to achieve it, yet after quitting their jobs, realize unaccounted expenses pop up or uncontrolled events invalidate their carefully calibrated calculations. After experiencing the euphoria of being done with work, it's a huge downer to have to drag yourself back into the job market.
My prediction erred because the markets have ripped since the pandemic-induced inflation dip. Just looking at the last 5 years—which includes a down year in 2022—the S&P has returned almost 14% annually, so in aggregate the market has almost doubled in this timeframe. Portfolios have thus ballooned in value, which starts to make folks think about living solely off their investments.
Additionally, AI advancements are disrupting knowledge work, and software engineering is at the vanguard of this shift. Previously, industry veterans could time their career exits to the size of their portfolios. But now, the crescendo of mass layoffs in recent months act as a forcing function[1] for retirement. Even those who aren't directly impacted are saving and investing more money to hedge against the uncertainty and the prospect of future layoffs.
The combination of job insecurity and high investment returns have pushed FIRE back into relevancy—though this time, with more variety. The core calculation remains the "4% rule," a principle that money invested in the broad US stock market can sustain for at least 30 years, modeled on historical data, if you withdraw only 4% annually from your portfolio[2].
But there are only so many ways to reframe the same simple math equation. The community started to segment, carving out niches that speak less to the mathematics and more to the implications in lifestyle based on the withdrawal amounts.
Let's first establish the baseline. The median US household income was $80k in 2024. To sustain that level of spending in retirement, you'd have to save $80k ÷ 4% = $2mm. This would be considered vanilla FIRE—even though the number in isolation looks daunting[3].
From here, the savings needed—and thus the lifestyles associated with expected annual spending—inspired a few variations. LeanFIRE is something like $1 million or less, with the implication that frugal living is acceptable if it means fewer years of work. FatFIRE is the opposite, $5mm or more, to avoid compromising on retirement spending with a hefty bankroll[4].
Separately, influencers started to craft strategies with milestones that operate more like semi-retirement. CoastFIRE is saving enough early, and letting retirement accounts compound, so you can coast at work and opt out of climbing the corporate ladder. BaristaFIRE and FlamingoFIRE are similar, with the caveat of requiring a bit more in savings, so you can downshift in career development and take a lower-paying job for supplemental income[5]. GeoFIRE looks to arbitrage location, moving to low cost-of-living countries to stretch your portfolio.
Yet, even with all the slicing and dicing of run rates and investment reserves, the underlying problem remains: all the planning and financial calculations assume that people know what their lives will look like 20, 30, and—in the case of early retirement—50 years later.
Naturally, the youngest aspiring retirees are drawn to the most precarious variants of FIRE; they haven't had as many years to build up their savings. Minimalist strategies like GeoFIRE and LeanFIRE take less money to kickstart, so they are the most attractive to those in their 30s and early 40s. But those are also precisely the years when career incomes peak, and a series of major life decisions—aging parents, marriage, children, divorces, etc.—are potentially still ahead. Someone who has trimmed their monthly spending to $4k/month in their late 20s probably isn't considering how childcare costs, a decade later, would blow up their carefully calibrated budget.
The irony, or perhaps the latent truth, is the personal finance influencers who are pitching FIRE and its myriad of variants aren't themselves retiring. It echoes the fundamental contradiction in self-improvement expertise—the goal is to sell the idea, not necessarily attest to its efficacy. If retirement planning was as straightforward and as automatic as FIRE adherents would claim, they wouldn't need to hustle for articles and podcasts and books to generate income. Successful retirees would…well, retire, and not ask for likes and subscribes.
But even if FIRE and its broad umbrella of derivatives are more marketing than strategy, I still credit the movement for providing the energy and the vocabulary to make personal finance less intimidating.
The field has been gated by expensive financial advisers and brokerages with minimum investment thresholds, so seeing a feed of YouTube videos explaining the 4% rule is democratizing, in the best sense of the word. Communities like the FI subreddit are accessible and provide additional resources, calculators, and guides.
So even with all the pitfalls and caveats and the wonkiness at the extremes, the overall discussion is cheerfully open and promotes financial literacy. In its current incarnation, I am a fan of WellInformedFIRE.
In a few rare cases, companies are even more explicit, offering voluntary buyouts to tenured employees for a mutually amicable departure. ↩︎
William P. Bengen, the financial adviser who originally did the analysis 30 years ago that gave rise to the 4% rule, has recently released a book that clarifies his math. He provides a better set of calculations, and concludes that a safe withdrawal rate should actually be around 4.6–4.7%. ↩︎
For comparison, the median amount saved for retirement, surveyed in 2026, does not exceed $200k for any age group. ↩︎
A couple of folks have aimed for financial gluttony beyond fat, into ObeseFIRE. Yes, the movement can often get silly. ↩︎
You can tell that nerds come up with these schemes, when we think service jobs are low-stress. ↩︎
I
]]>I think it was the semester's first career fair, during my sophomore year in college. A Microsoft recruiter, screening for computer science majors, pulled me aside and asked me what my "favorite language" was. I panicked, and told them that, uh, I sorta liked English.
I was reminded of this silly incident when coming across this article a few months back about, of all things, the programming language Perl:
For those not exposed to web development in the late '90s, Perl was the most popular language for building websites during those early years[1]. It was a messy language, a dense mixture of ASCII symbols and keywords with few guardrails on code structure. By the 2000s, Perl lost its popularity in web development to the likes of PHP and Ruby, though it has retained its usage as a scripting Swiss-Army chainsaw.
One aspect of Perl, though, deserves attention: its motto, "There's More Than One Way to Do It" (TMTOWTDI, pronounced "Tim Toady"). This was a core design philosophy from its creator, Larry Wall. He modeled his programming language in the same vein as human languages. In particular, he appreciated the richness and the sheer variety of ways that human languages have of expressing similar ideas, and their tendency to evolve over time based on speakers' needs and experiences. The result is communication that is inconsistent, messy, but also multi-layered and expressive and individual.
Linguistics drove Perl's development direction. For instance, the language features multiple syntaxes for the same operator; many overlapping functions to manipulate strings based on emerging needs; a whole bevy of selectors and patterns for regular expressions. Its package manager, CPAN, is gloriously organic in breadth and scope, well before Node's npm took the crown. In providing a breadth of keywords and grammars, Perl invites developers to use whatever formats they prefer. This was, and still is, a fairly rare programming language design principle.
A major part of Computer Science and coding school curricula revolves around understanding how machines execute, the specificity and deterministic behaviors that drive computing. Every programmer remembers the first time their machine is doing what it's told, not what they meant.
Compare Perl's free-wheeling formatting to languages like Java or Golang. The former spawned a popular variant, Java EE, meant for enterprises to build web applications at scale, while the latter promotes tooling to standardize formatting as a best practice. Yes, the machines execute instructions all the same, but it's easier for programmers to read and understand the code when the language provides an unambiguous, straightforward syntax. We learned that when teams of programmers collaborate, it's rarely productive to spend time debating personal formatting preferences and syntactic quirks.
LLMs are bringing back TMTOWTDI.
Vibe coding is this phenomenon of building software by describing functionality in prose, then relying on the LLM to understand the task and write the code. For non-programmers, this bypasses many of the traditional and technical steps of learning how to code. You can, realistically and actually, create functional software without knowing the syntax of a programming language; you can skip foundational computing concepts altogether.
Freed from the constraints of programming syntax, we're coding with actual human language, with all its ambiguity and looseness and inferences based on our own experiences. For example, these four prompts may well build the same app:
AI agents are a spiritual successor to Perl.
But, Perl's rise and fall also holds a cautionary tale. The downside of enabling permissive, almost individualist coding is that it's really hard to understand afterwards[2]. Programmers have plenty of quips about the tedium of reading Perl code: "write once, read never," or "write-only code." The language fell out of favor for web development in part because server code needs to be maintained.
I'm wary of the same problems with vibe-coded systems. Without overarching architecture and technical plans, each piece of LLM-generated code is created in isolation, and the entire system is brittle. When there are no easy ways to evolve the system, tech debt accrues and changes easily break functionality. Some engineers admit that they are not reviewing AI-generated code, because it's harder to make sense of its structure—unsurprising, when there is none—and it also takes a lot more effort to retroactively apply structure to giant piles of already-written code.
Maintenance is already difficult when the code is piecemeal; it's impossible when the developer cannot read the output.
Other languages eventually superseded Perl for web development, but it's more accurate to say that the deciding factor was the emergence of web development frameworks: CakePHP, Zend, Django, Ruby on Rails, etc. Many of these frameworks sold developers on their highly opinionated structure; they implemented variations of the Model-View-Controller (MVC) development pattern borrowed from desktop applications. This was the complete opposite of TMTOWTDI, but it's a pattern that has persisted across generations of development, from desktop to web to mobile.
I anticipate LLMs following the same trajectory. Already, vibe coders are figuring out that they get more consistent output and better quality code when they are more specific about requirements up front. I'm noticing engineers experimenting with lengthy templates and step-by-step plans, so coding agents have the necessary structure to build with architectural intentions. Inventing and refining frameworks may well be what saves us from the sloppiness of AI-generated code.
They would spawn new processes called CGI scripts to handle interactions on a webpage; this architecture, though, has largely fallen out of favor. ↩︎
The succinct syntax compounds the readability issue. ↩︎
"The world is moving faster than ever…", and all of its paraphrased clichés, have become a personal pet peeve. It shows up in business articles, podcasts, and plenty of advertising, to trigger a sense of anxiety and uncertainty about change. Just before they try to sell you something.
That's not to say the world has stayed the same. In 2026, we're inundated with geopolitical news and weekly benchmarks on AI progress. Earlier this decade, it was our once-in-a-century pandemic and the biggest war in Europe since WW2. Stretch back to the 2000s and we experienced changes from social media to the financial crisis to smartphones to 9/11 to the dot-com saga. Bill Gates's observation that
We always overestimate the change that will occur in the next two years and underestimate the change that will occur in the next ten.
absolutely rings true even when examined in reverse.
Yet, history tends to fixate on the memorable—the events and trends that eventually prove their impact in subsequent years. 9/11 was a pivotal moment, because it led to a two-decade-long occupation of Afghanistan that only concluded a few years ago, and because we're reminded of its bureaucratic legacy—Department of Homeland Security—regularly at the airport. Social networking came about in the early 2000s, but we're struggling with the effects of social media a quarter of a century later.
Forgotten are the bygone relics of those eras: Napster and iPods, pets.com and Webvan, Palm Pilots and Blackberries, AOL and MySpace. They also represent change in their prime, but ultimately to Darwinist ends.
Bob Iger's autobiography, The Ride of a Lifetime, is a good example of this paradox. He's the (now) two-time CEO of Disney, and presided over the company for the majority of the 21st century as a widely-revered executive. To convince the Disney board to invest in digital streaming[1], he tapped into this exact framing, that the times are moving so fast that they had to move aggressively. For all the urgency, though, Iger is still known for his long-term strategic initiatives, those that have taken decades to coalesce: the continuous expansion of theme parks, and the successful acquisitions of multiple major media companies[2].
So maybe it's less that change is happening faster, but rather, that we feel overwhelmed by all the perceived change.
It's the rapid staccato of information, shouted on every 24-hour news channel, social media feed and digital mountaintop. It's the clickbait headlines and sensationalized scripts, telling you why "this changes everything." It's the relentless optimization for attention, by preying on emotions and instinctive reactions.
Real change, of course, takes time to percolate. Whether it's technology or social dynamics, persistence over years and decades is what it takes to drive impact that survives history. For instance, the maturity of e-commerce settled over three decades' worth of improvements and adjacent-industry innovations.
Change for its own sake is just noise. The speed and frequency of these notifications informing us of change are irrelevant in the long run. They resemble what computer scientists call a random walk, repeatedly moving randomly, without direction. Understandably, most outcomes land not too far from the starting point.
The societal changes that do stick are the ones that compound upon prior changes. Of course, it takes more work to identify long-term trends, more time to let the effects of compounding reveal themselves.
Perhaps, moving at the speed of retrospection.
I've been sneaking vacation photos into my Year in Review posts, as we've had the opportunity to go farther away in recent years. The travel switch flipped when the kids got old enough to remember their adventures, so that during these trips, we can emphasize differences in culture and lifestyles abroad. Along the way, we evolved our process—to stretch out the enjoyment we get from our vacations[1].
There are three distinct phases: planning, traveling, and reminiscing.
Planning sounds like the most work—and it is—but we try to make it less tedious and more fun. We have spreadsheets, local attraction documents broken down by day, a dozen open browser research tabs, and usually end up spending multiple nights booking flights and hotels. It's understandable why people use travel agencies to handle the logistics.
But we still prefer to book our own transportation, lodging, and itineraries. Some of it is for the love of the game—looking for good deals, within reason[2]. A part of it, though, is that it's genuinely exciting to research what a locale has to offer for tourists. There are so many blogs, guides, sites, forums, and subreddits that share travelers' experiences; it's now even easier to synthesize all the reviews with AI to come up with solid recommendations. Our goal is to strike a balance between purely tourist attractions and a handful of "live like a local" activities as we discover them.
An underrated benefit in extensive planning is discussing the trip with family and friends before we go, and receiving their suggestions or having them share our excitement. For us in California, reliable vacation spots like Hawaii and Japan are ripe for small talk that lead to solid recommendations and travel ideas. In turn, we're happy to report on our experience afterwards to elevate their future vacations. I've really come to enjoy the social connection that we pull forward before we embark on the adventure.
Traveling is, well, the actual trip. Assuming that we did our plans well in the last step, we should have a couple of anchor activities, and a smattering of optional destinations and things to do that we'll decide on each day. Here, I'm reminded of a powerful piece of advice:
Travel like this will not be the last time you'll come here.
It's such a liberating shift in mindset, to avoid overstuffing schedules and feeling like we have to knock out some tourist checklist. It also helps that we don't really participate in social media travel oneupsmanship, so the Instagram sundae selfies and famous anime backdrops are completely absent from our itinerary[3]. Enjoying the moment means, in part, to avoid feeling like we're missing out; we can always come back.
Reminiscing is structuring frequent reminders of our vacations afterwards, to trigger those happy memories and garner even more value from the experience. I make it a point to lug my prosumer camera to faraway trips—to capture high-quality photos of the gorgeous landscapes, the spontaneous portraits, the unfamiliar streets, and the simple curiosities in our adventures.
Upon returning to my workstation, I spend a couple of hours to go through my stacks of pictures. Some of it is standard photo culling—deleting 80% of the album that doesn't meet the quality bar—but it also gives me another way to relive the memories while they're still fresh. The curated photoset automatically goes on rotation on the Google Homes around the house, and makes for a great conversation starter.
Then, a couple months later, I'll usually run a few physical prints: canvases to hang on the stairwell, a photobook to tell the story, and holiday cards to wrap up the year.
All these physical artifacts are here to generate memory dividends from the trip, triggers for reliving those locales and those experiences. And this realization has shifted my vacation photography. Instead of capturing portraits or selfies in front of famous landmarks, I'm more inclined to capture actions taken in the moment, without the subjects—my wife and kids—being fully aware of my camera[4].
Our Japan trip is a canonical example; all three phases earn their keep.
Now, visiting Japan almost requires a plan; their problem of tourist overcrowding has prompted most popular destinations to implement ticketing systems, which are often sold out weeks ahead of time. I dove into this maybe 4 months before our trip, looking up dedicated subreddits and travel sites to build up a three-week itinerary. Friends who had gone years prior were happy to vouch for certain attractions and give tips on how to book reservations.
The vacation itself was great, with set travel between Tokyo, Kyoto, and Osaka but loose plans within each city. Some days were dedicated to booked attractions[5], but we allowed ourselves spontaneity throughout, like grabbing a Pokemon café spot last minute, or hiking up the famous Fushimi Inari shrine at night.
By the end of it, I processed and kept around 700 photos of our trip. Three years later, I still come across these photos: around the house, on my phone, sometimes as reminders from my journal app. They're little souvenirs, personalized to our unique experience.
The secret here isn't to go on longer vacations, or to spend more money on more exotic locales. Instead, it's breaking out a singular element—the vacation travel—into three phases, and making the most of each one in accordance with their own rhythms. When we do a good job in the before and after, we get to tap into the joys of anticipation and nostalgia, as bookends to the adventure.
We arrived at our setup organically, but I felt validated when I read a similar idea in Die with Zero, while this video on "how to plan vacations" spells it out more explicitly. ↩︎
For instance, Tuesday mornings are usually the cheapest for flights, and if you hone your search parameters enough you can get a small discount at sites like Hotwire. ↩︎
When you're a watch nerd, what does get on the list is the Seiko Horology Museum. ↩︎
Okay, there's one major exception; my mom only wants to see pictures of her grandchildren posing in front of landmarks, and I do take a bunch of pictures to appease the grandparents. ↩︎
Major sites like Universal Studios Osaka and the Studio Ghibli museum, plus limited fares like the Aoniyoshi Kintetsu train ride. ↩︎
A couple months ago, I went on the CTO Confessions podcast. In one of the segments, we talked about the impending—or already developing—problem of the shrinking talent pipeline. With agentic AI, senior engineers are now expected to manage multiple coding agents to augment their output, and this is in lieu of more traditional training of junior engineers recruited from coding schools or computer science programs. This isn't hypothetical; the data from the last 5–6 years shows a significant reduction in hiring junior engineers, to the point where students are responding by choosing other majors.
The Skill Code: How to Save Human Ability in an Age of Intelligent Machines addresses this concern directly. The author had spent years researching how humans learned on—or as it turns out, sometimes off—the job. But as AI continued to show extraordinary progress, he reframed his findings to highlight the importance of preserving skills across generations of humans, the transference of experience between novices and experts.
The book breaks it down into three determinants, and names them: Challenge, Complexity, and Connection. In my own career as an engineering leader developing people on my teams, these categories certainly resonate:
Challenge is setting up tasks so that a novice can learn by doing something unfamiliar, and ideally, unsettling. People on my teams will know this as "Growth via Discomfort," where I'll intentionally assign work so they'll be forced to do something they've never done before and even be scared of trying. This could be running an all-hands; pushing code to production; or writing up a post-mortem. When the task is tough, but not so hard as to be overwhelming, the novice makes incremental improvement.
Complexity is providing space to the novice so that they can discover the solution for themselves. This is reminiscent of the pedagogical approach taken up by educators when I worked in EdTech—provide the framework, but also give students some autonomy to figure things out for themselves. This model helps the learner independently arrive at their own solutions, with a sense of achievement that makes the lessons more memorable.
Connection describes the social bond between mentor and mentee. Having the teacher around allows them to give feedback and encouragement, and this earned familiarity is what allows mentors to craft the right challenges, at the right times, with the appropriate amounts of complexity. I suspect that this aspect of skill development is the hardest for AI to replicate; so far all of our AI usage shows that humans strongly prefer interacting with other humans.
This explicit breakdown shows that skill development is multifaceted, but also interdependent: it's the design of tasks, their incremental difficulty and ambiguity, but also in an environment conducive to learning. We just lived through this in the pandemic aftermath. Remote work was initially prevalent and unavoidable, but it was the junior employees who wanted to go into the office for more face time, so they could socialize and build those connective bonds with their more senior colleagues.
Experts also suffer when mentorship ties are severed: first by COVID, then by AI. They lose the intrinsic satisfaction of mentorship, but also the opportunity to improve by teaching others. The act of mentoring others is not just a form of altruism and paying it forward; the mentor also gets to practice their skills, adjust and refine their approach based on mentee feedback and outcomes. In the best cases, they elevate their mentees to take over aspects of their responsibilities, which frees up space for the mentor to take on new challenges themselves.
Breaking this with AI sacrifices all of these benefits. Worse, it threatens to widen the skill gap. The book flags this problem—massive skill inequality—where the experienced workers execute with prompts and specs, while the less experienced workers don't receive the support needed to self-improve. The demand for software engineers has continued to tick up, but positions are now tilted towards more experienced roles. It's an echo of the K-shaped economy that economists identified during the pandemic recovery, featuring a stark bifurcation of the haves and have-nots.
The Skill Code identifies what it takes to transfer skills from one generation to the next: challenge, complexity, and connection. The emergence of AI disrupts this framework by looking to replace aspects of this skill code, but that's a choice borne of short-term efficiency, not a long-term inevitability. AI in education provides an early blueprint—instead of just replacing people with automation, we can leverage AI as a tutor, using its flexibility to fill in gaps in current employee training systems that are often stale and too rigid. If we reframe our goals to be the rich inheritance of skill across generations, then AI's role would naturally shift to be an augmentative accelerant.
]]>I called it two years ago: E-ink was stuck. It was a niche display technology, without the same R&D or manufacturing volume as conventional LCDs, and therefore lagged in both price and quality. If the increasingly slow and iterative releases of the Amazon Kindle line are any indication, there wasn't much space left for innovation.
Glad to be wrong.
Now, the take—that e-ink tech plateaued years ago—holds up. With e-readers, the core monochrome displays haven't seen a new release since 2023, with the Carta 1300 replacing the Carta 1200 but retaining most of the same specs; in practice they're similar enough to be identical for everyday usage. Third-generation color e-ink displays were introduced in 2022, but it took a few years for device makers to incorporate them, and each implementation comes with significant tradeoffs: slower refresh rates, halved resolutions, and limited color palettes[1].
Since the displays themselves are slow to evolve—and in the case of monochrome screens, already excellent—product design started experimenting with device form factors. The original Amazon Kindle started with a 6" screen, roughly the size of a paperback and successfully moved the printed word to digital ink. Subsequent Kindles added backlights and touch capacities while keeping their screens equally large. For a long time, this combination of hardware features set the standard for commercial e-readers, like the Rakuten Kobo series and the Onyx Boox devices.
One direction has been to build slightly bigger e-ink tablets, with a pen for notetaking. The original Remarkable tablet launched with this idea in 2013, and its follow-up, the Remarkable 2, solidified the utility. This is now its own mature subcategory, where Remarkable tablets compete with Boox Notes and Kindle Scribes and Supernote devices.
The other direction is to make e-ink gadgets smaller. The Boox Palma introduced an e-reader resembling a smartphone, and even though it runs Android, it doesn't have all the necessary hardware (e.g., SIM card support, speakers) to fully function as a phone replacement. As I don't read books on my phone, I was initially skeptical, but after I carried one around for a few months, I grew to appreciate its lightweight construction, portability, and battery life. From a readability standpoint, the skinny form factor is ideal for rendering single columns of text at an optimal line length.
The smaller screen, along with e-ink's inherent limitations on color and refresh rates, constrain functionality. But—minimalism works really well for e-readers. By sideloading Before Launcher and KOReader, I keep my device focused on its singular role, and avoid the apps and games and notifications that take over phones and iPads. It makes for a great single-purpose device, but the Palma is not priced or marketed as a focus gadget.
So it's encouraging to see different ideas come to market, particularly with even smaller screens as e-readers at lower price points. The latest gadget catching people's attention is the Xteink X4, an e-reader with a minuscule 4" screen that sticks magnetically onto the backs of smartphones, with an MSRP that's in line with other phone accessories. When enthusiasts found its built-in firmware and reader software lacking, they built their own to flash onto the hardware. The innovation is happening—perhaps less so at the display level, but with its surrounding hardware and software ecosystems.
LCDs have standardized on 256 values for each of the RGB (red/green/blue) values, for a total of 16 million colors, for decades now. Color e-ink screens can only show 4096 colors, and they often look desaturated in comparison. ↩︎