More from Jorge Arango
In episode 3 of the Traction Heroes podcast, Harry and I discussed the relationship between decision-making and data. Is it ok for some decisions to be made intuitively? What role do emotions play in decision-making? How do you deal with stakeholders who demand that decisions be backed with data? Tune in to find out!
In week 5 of my humanities crash course, I read Aristotle’s Nicomachean Ethics and Poetics. I also listened to more Bach, looked at Italian Baroque sculpture, and watched a classic – if somewhat boring – movie. Getting through it despite the difficulties was part of the point. Readings Let’s start with the Nicomachean Ethics. It’s available as a beautiful free ebook over at Standard Ebooks. That said, I opted for a paid version from Amazon. Why? Because I found the book hard to read. For the first time in this course, I felt like I was being forced to eat my broccoli. Aristotle is brilliant, but he’s also circuitous. The Kindle version I bought included an outline that made it easier. Nicomachean Ethics looks to answer a key question: “What’s the purpose of life?” Aristotle’s answer is happiness, but not in the sense we think of. Most of us associate happiness with pleasure. Aristotle means it in a different sense. He uses the term eudaemonia, which is something like flourishing through living a life of virtue for its own sake. It’s not something inherent in us, but something we work towards because we want to develop our full potential. Aristotle outlines four stages to virtue: Unvirtuousness - rejecting virtue altogether Incontinence - knowing what’s virtuous but failing to do it Continence - doing what’s right despite internal resistence True virtuousness - doing what’s right for its own sake Virtuousness isn’t about thinking or talking about doing good but actually doing good – i.e., adopting virtuous habits. Paraphrasing another famous philosopher, good is as good does. What is “good”? There are no canned answers; we must evaluate situations as they come. Often, the answer lies in the mean between extremes. For example, courage lies somewhere between cowardice and recklessness. Aristotle contrasts other extremes in areas such as generosity and pride. Friendship is central to Aristotle’s conception of happiness. Humans are social animals; our well-being depends on our relations with others. Aristotle provides a taxonomy that ranges from friendships of convenience to those motivated by virtue. These latter are the most valuable and rare. Aristotle’s approach is highly pragmatic. He advocates practical rather than theoretical wisdom. For example, he acknowledges that happiness requires a baseline of material comfort. Self-mortification won’t get you there. The book reminded of the Asian concept of the Middle Way. Like Confucius, Aristotle rejects extremes and encourages wisdom and judgment based on practice rather than theoretical understanding. Practical wisdom is more important than abstract knowledge. On to the Poetics, which is both shorter and easier. It’s an analysis of narrative forms. Aristotle suggests the purpose of art is imitating life. There are various means of doing so; the Poetics focuses on the theater. Aristotle distinguishes three kinds of narratives: Tragedy deals with serious issues and noble characters Comedy deals with common people and everyday situations Epics are longer narratives that deal with heroic subjects The Poetics explores what makes them tick. Aristotle’s advice remains relevant; e.g., the famous “three act” structure comes from his analysis. Audiovisual Music: Bach’s Cello Suites. I’ve heard this work many times; I own Yo-Yo Ma’s 1998 recording, so that’s the version I know best. For this exercise, I checked out a version by Pablo Casals. (I prefer the Ma recording.) Art: sculpture by Gian Lorenzo Bernini. As I’ve mentioned in previous entries, sculpture is hard to appreciate online. That said, I found a video with useful footage of key works: This video says a lot about our times. At first, I was excited: a free hour-long documentary about Bernini’s work! The footage seemed well-done, with professional lighting and lots of close-ups of the work. The film also featured a calm, somber narration with an “erudite” English accent. But there were also signs that this was an amateur effort. Graphics (e.g., titles, photos) and edits looked unprofessional. Halfway through the video, I realized the narrator was an AI and the script taken verbatim from another website. Fooled me! But I did learn about Bernini and saw his sculpture closer than ever. Cinema: as I’ve done in the last two weeks, I asked AI for a movie recommendation. In this case, I asked Perplexity for classic films that reflect Aristotle’s ethics. It suggested four: 3:10 TO YUMA (2007) THE SEVENTH SEAL (1957) MY DINNER WITH ANDRE (1981) THE FOUNTAINHEAD (1949) I’d never heard of 3:10 TO YUMA, but it didn’t fit my criterion for “classic.” I’d read The Fountainhead and seen THE SEVENTH SEAL and neither seemed apt. So I went with MY DINNER WITH ANDRE, which had been on my to-watch list for a long time. I knew the film’s premise: an intimate dinnertime conversation between two semi-fictionalized versions of Wallace Shawn and André Gregory. It turned out to be mostly Gregory talking. This clip gives you a taste: Reflections As with Nicomachean Ethics, I found MY DINNER WITH ANDRE hard to get through. Wikipedia says it’s supposed to be a “comedy-drama,” but it’s neither funny or dramatic. Instead, I found it mostly boring. That said, I see how it illustrates ideas in the book. Both characters are working through the purpose of life. Wally has become complacent, eking out joy from simple pleasures (e.g., not finding cockroaches in his coffee) while André sacrifices intimacy for extreme experiences. Their friendship gives them a way to reflect on their pursuits, but they’re both stuck in self-centered framings that keep them from eudaemonia. Wally might come closest. By film’s end, he’s recaptured some connection with reality. But André seems lost. At one point, he says of other people, They’re living in an insane dreamworld. They’re not looking. That seems very strange to me. I felt the same about his narratives. He traveled great physical and psychic distances looking for fulfillment he could’ve found at home if he could only see clearly. Alas, as with Travis in PARIS: TEXAS, the 1960s counterculture ideology distorted André’s worldview. Pining for extremes, he exchanges reality (e.g., his work in the theater, domestic life with his wife, Bonita) for abstract ideals. Remaking the world from scratch is a fool’s errand; bills eventually come due. At middle age, both Travis and André come up short. Watching this film and reading the Nicomachean Ethics were exercises in flexing Aristotelian continence. I finished both but didn’t enjoy them. Why did I push through? Because this course is a worthwhile endeavor, and that entails sacrifice. It’s to do easier by keeping the broader goal in focus. The point isn’t getting pleasure from every book or movie; it’s becoming the kind of person who acts from practical wisdom. Notes on Note-taking I used AI to understand the Nicomachean Ethics. As I read on my iPad, I swiped between the Kindle and ChatGPT apps. For example, I asked the AI about the relationship between continence and willpower. Among other things, it said that While Aristotle acknowledges the value of continence (self-control), his ultimate goal is to cultivate a state of virtue where desires and reason are harmonized. He argues that this is achieved not through raw willpower but through proper education, practice, and environment. By fostering good habits and practical wisdom, individuals can overcome the internal conflicts that lead to incontinence and live a life of flourishing. This was useful. As with previous weeks, I also looked to YouTube for help in understanding the reading. This conversation was particularly useful: After finishing the books, I created notes for each in my Obsidian vault. But I edited these notes in Emacs using obsidian.el rather than Obsidian. The reason for this is I’m experimenting with gptel, which lets me work with AIs in Emacs. Using gptel, I have a running Claude chat window alongside my notes. I can include particular buffers and files as part of the context that gets sent to the LLM. I can also highlight particular regions and send that. I’m just starting these experiments, but it already seems like a more flexible way of developing texts with LLMs. (Albeit one that requires effort: Emacs isn’t for everybody. Again, continence!) Up Next We’re reading Plato’s Symposium and books 1 and 6-8 of Herodotus’s Histories for next week. I read the Histories a couple of decades ago and loved them, so I’m looking forward to revisiting them. Check out Gioia’s post for the full syllabus. Also, I’ve started a Substack to share what I’m learning in this course. Head over there if you want to subscribe and comment.
Disruptive technologies call for rethinking product design. We must question assumptions about underlying infrastructure and mental models while acknowledging neither change overnight. For example, self-driving cars don’t need steering wheels. Users direct AI-driven vehicles by giving them a destination address. Keyboards and microphones are better controls for this use case than steering wheels and pedals. But people expect cars to have steering wheels and pedals. Without them, they feel a loss of control – especially if they don’t fully trust the new technology. It’s not just control. The entire experience can – and perhaps must — change as a result. In a self-driving car, passengers needn’t all face forward. Freed from road duties, they can focus on work or leisure during the drive. As a result, designers can rethink the cabin experience from scratch. Such changes don’t happen overnight. People are used to having agency. They expect to actively sit behind the wheel with everyone facing forward. It’ll take time for people to cede control and relax. Moreover, current infrastructure is designed around these assumptions. For example, road signs point toward oncoming traffic because that’s where drivers can see them. Roads transited by robots don’t need signals at all. But it’s going to be a while before roads are used exclusively by AI-driven vehicles. Human drivers will share roads with them for some time, and humans need signs. The presence of robots might even call for new signaling. It’s a liminal situation that a) doesn’t yet accommodate the full potential of the new reality while b) trying to accommodate previous ways of being. The result is awkward “neither fish nor fowl” experiments. My favorite example is a late 19th Century product called Horsey Horseless. Patent diagram of Horsey Horseless (1899) via Wikimedia Yes, it’s a vehicle with a wooden horse head grafted on front. When I first saw this abomination (in a presentation by my friend Andrew Hinton,) I assumed it meant to appeal to early adopters who couldn’t let go of the idea of driving behind a horse. But there was a deeper logic here. At the time, cars shared roads with horse-drawn vehicles. Horsey Horseless was meant to keep motorcars from freaking out the horses. Whether it worked or not doesn’t matter. The important thing to note is people were grappling with the implications of the new technology on the product typology given the existing context. We’re in that situation now. Horsey Horseless is a metaphor for an approach to product evolution after the introduction of a disruptive new technology. To wit, designers seek to align the new technology with existing infrastructure and mental models by “grafting a horse.” Consider how many current products are “adding AI” by including a button that opens a chatbox alongside familiar UI. Here’s Gmail: Gmail’s Gemini AI panel. In this case, the email client UI is a sort of horse’s head that lets us use the new technology without disrupting our workflows. It’s a temporary hack. New products will appear that rethink use cases from the new technology’s unique capabilities. Why have a chat panel on an email client when AI can obviate the need for email altogether? Today, email is assumed infrastructure. Other products expect users to have an email address and a client app to access it. That might not always stand. Eventually, such awkward compromises will go away. But it takes time. We’re entering that liminal period now. It’s exciting – even if it produces weird chimeras for a while.
Nikki Anderson interviewed me for her User Research Strategist podcast. Our focus was AI’s impact on research and informaton architecture – and how practitioners can take advantage of this new technology. See the episode page, which includes show notes. If you want to learn more about my experiments in AI, check out this page.
More in technology
When you’re dealing with a particularly large service with a slow deployment pipeline (15-30 minutes), and a rollback delay of up to 10 minutes, you’re going to need feature toggles (some also call them feature flags) to turn those half-an-hour nerve-wrecking major incidents into a small whoopsie-daisy that you can fix in a few seconds. Make a change, gate it behind a feature toggle, release, enable the feature toggle and monitor the impact. If there is an issue, you can immediately roll it back with one HTTP request (or database query 1). If everything looks good, you can remove the usage of the feature toggle from your code and move on with other work. Need to roll out the new feature gradually? Implement the feature toggle as a percentage and increase it as you go. It’s really that simple, and you don’t have to pay 500 USD a month to get similar functionality from a service provider and make critical paths in your application depend on them.2 As my teammate once said, our service is perfectly capable of breaking down on its own. All you really need is one database table containing the keys and values for the feature toggles, and two HTTP endpoints, one to GET the current value of the feature toggle, and one to POST a new value for an existing one. New feature toggles will be introduced using tools like Flyway or Liquibase, and the same method can be used for also deleting them later on. You can also add convenience columns containing timestamps, such as created and modified, to track when these were introduced and when the last change was. However, there are a few considerations to take into account when setting up such a system. Feature toggles implemented as database table rows can work fantastically, but you should also monitor how often these get used. If you implement a feature toggle on a hot path in your service, then you can easily generate thousands of queries per second. A properly set up feature toggles system can sustain it without any issues on any competent database engine, but you should still try to monitor the impact and remove unused feature toggles as soon as possible. For hot code paths (1000+ requests/second) you might be better off implementing feature toggles as application properties. There’s no call to the database and reading a static property is darn fast, but you lose out on the ability to update it while the application is running. Alternatively, you can rely on the same database-based feature toggles system and keep a cached copy in-memory, while also refreshing it from time to time. Toggling won’t be as responsive as it will depend on the cache expiry time, but the reduced load on the database is often worth it. If your service receives contributions from multiple teams, or you have very anxious product managers that fill your backlog faster than you can say “story points”, then it’s a good idea to also introduce expiration dates for your feature toggles, with ample warning time to properly remove them. Using this method, you can make sure that old feature toggles get properly removed as there is no better prioritization reason than a looming major incident. You don’t want them to stick around for years on end, that’s just wasteful and clutters up your codebase. If your feature toggling needs are a bit more complicated, then you may need to invest more time in your DIY solution, or you can use one of the SaaS options if you really want to, just account for the added expense and reliance on yet another third party service. At work, I help manage a business-critical monolith that handles thousands of requests per second during peak hours, and the simple approach has served us very well. All it took was one motivated developer and about a day to implement, document and communicate the solution to our stakeholders. Skip the latter two steps, and you can be done within two hours, tops. letting inexperienced developers touch the production database is a fantastic way to take down your service, and a very expensive way to learn about database locks. ↩︎ I hate to refer to specific Hacker News comments like this, but there’s just something about paying 6000 USD a year for such a service that I just can’t understand. Has the Silicon Valley mindset gone too far? Or are US-based developers just way too expensive, resulting in these types of services sounding reasonable? You can hire a senior developer in Estonia for that amount of money for 2-3 weeks (including all taxes), and they can pop in and implement a feature toggles system in a few hours at most. The response comment with the status page link that’s highlighting multiple outages for LaunchDarkly is the cherry on top. ↩︎
Thomas Ricouard: Is Software Engineering Over as We Know It? Writing code has always been a means to an end, especially in my case, where my goal is to build and ship products to millions of users. What’s really happening is a shift in focus: away from obsessing
If you’re a fan of open-source technology, Gustavo Salvador Reynaga Aguilar is a name to know. An experienced educator with a passion for technology, Gustavo has spent nearly three decades teaching and inspiring students at CECATI 132 in Mexico. He’s worked with platforms like Arduino, Raspberry Pi, and BeagleBone, and is renowned for projects such […] The post Gustavo Reynaga: Inspiring the next generation of makers with MicroPython appeared first on Arduino Blog.
I’ve been really enjoying the book Creativity Inc by Ed Catmull of Pixar, it was recommended to me by my colleague Dave Martin a while back and I finally got around to it. There’s an interesting story in it where George Lucas has asked him to develop a film editing system that was digital. While … Continue reading Ed Catmull on Change →
For the love of god, ask the computer people if your plan might actually work first.