Posts in Design (20 found)
iDiallo Yesterday

Beyond Enshittification: Hostile

The computer is not just working less well. Instead, it is actively trying to undermine you. And there is nothing you can do about it. When Windows wants to update, you don't get to say "no." You get "Update now" or "Remind me later." When Twitter shows you notifications from people you don't follow, you can't dismiss them, only "see less often." When LinkedIn changes your email preferences, you'll reset them, only to find they've reverted a few months later. These aren't bugs. They aren't oversights. They're deliberate design choices that remove your ability to say no. It's not dark patterns anymore. It's not even enshittification. It's pure hostility . As developers, there are two types of users we find extremely annoying. The first is the user who refuses to get on the latest version of the app. They're not taking advantage of the latest bug fixes we've developed. We're forced to maintain the old API because this user doesn't want to update. They're stubborn, they're stuck in their ways, and they're holding everyone back. The second type of user is the one who's clueless about updates. It's not that they don't want to update, they don't even know there is such a thing as an update. They can be annoying because they'll eventually start complaining that the app doesn't work. But they'll do everything short of actually updating it. Well, I fall into the first category. I understand it's annoying, but I also know that developers will often change the app in ways that don't suit me. I download an app when it's brand new and has no ads, when the developer is still passionate about the project, pouring their heart and soul into it, making sure the user experience is a priority. That's the version I like. Because shortly after, as the metrics settle in and they want to monetize, the focus switches from being user-centric to business-centric. In Cory Doctorow's words, this is where "enshittification" starts. Now, I'm not against a developer trying to make a buck, or millions for that matter. But I am against degrading the user experience to maximize profit. Companies have figured out how to eliminate the first type of user entirely. They've weaponized updates to force compliance. Apps that won't launch without updating. Operating systems that update despite your settings. Games that require online connection to play single-player campaigns. Software that stops working if you don't agree to new terms of service. The philosophy of "if it ain't broke, don't fix it" is dead. They killed it. And they can get away with it because of the network effect. We are trapped in it. You use Windows because your workplace uses Windows. You use Excel because your colleagues use Excel. You use Slack because your team uses Slack. You use WhatsApp because your family uses WhatsApp. When Windows suddenly requires you to have a Microsoft account (an online account) just to log into your local computer, what are your options? Switch to Apple? After twenty years of Windows shortcuts, file systems, and muscle memory? Switch to Linux? When you need to share files with colleagues who use proprietary Microsoft formats? You can't. And they know you can't. They're not competing on quality anymore. They're leveraging your professional dependency, your colleagues' software choices, your decade of learned workflows. You're not a customer who might leave if the product gets worse. You're a captive audience. This is why the hostility is possible. This is why they can get away with it. Enshittification, as Doctorow describes it, is a process of degradation. First, platforms are good to users to build market share. Then they abuse users to favor business customers. Finally, they abuse those business customers to claw back all the value for themselves. But what we're seeing now is different. This isn't neglect or the natural decay of a profit-maximizing business. This is the deliberate, systematic removal of user agency. You are presented with the illusion of choice. You can update now or update later, but you cannot choose to never update. You can see less often, but you cannot choose to never see it. You can accept all cookies instantly, or you can navigate through a deliberately complex maze of toggles and submenus to reject them one by one. They borrow ransomware patterns. Notifications you can't dismiss, only snooze. Warnings that your system is "at risk" if you don't update immediately. Except once you update, the computer is restarted and you are presented with new terms you have to agree in order to access your computer. Every Windows update that turns Bing back on and forces all links to open with Edge. Every app update that re-enables notifications you turned off. Every platform that opts you back into marketing emails and makes you opt out again. Updates are now scary because they can take you from a version that serves your interest, to a version that services the company's. The update that adds telemetry. The update that removes features you relied on. The update that makes the app slower, more bloated, more aggressive about upselling you. These aren't accidents. They're not the result of developers who don't care or designers who don't know better. They're the result of product meetings where someone said "users are rejecting this, how do we force them to accept it?" and someone else said "remove the 'no' button." As a developer, and someone who has been using computers since I was 5 years old, I don't really care about the operating system. I can use them interchangeably. In fact, I don't care about Twitter, or any of these platforms. When I log into my computer it's to write a document. When I use my mobile device, it's to talk to my friends or family. When I access my dev machine, it's to do my job. The operating systems or the platforms are secondary to the task at hand. The software is supposed to be the tool, not the obstacle. But now the tool demands tribute. It demands your data, your attention, your compliance with whatever new terms it has decided to impose. You can't switch because switching costs everything. Your time, your muscle memory, your compatibility with everyone else who's also trapped. The network effect isn't just about other people using the same platform. It's about your own accumulated investment in learning, customization, and integration. So when they add hostile features, when they remove your ability to say no, when they force you to have an online account for offline work, when they interrupt you with notifications you can't dismiss, when they change interfaces you've spent years mastering, you can only accept it. Not because you want to. Not because it's better. Because you have no choice. And that's not enshittification. That's hostility.

0 views
Grumpy Gamer 2 days ago

A History of Death by Scrolling

Who doesn’t enjoy a good history lesson? I know I do. Oh please let there be a test at the end. Let me take you back to 2018. We had just released Thimbleweed Park, finished all the ports, done an update, and I am thinking about something new. I was regularly going to Daniel Cook’s Seattle prototyping meet-up and trying to come with a new game to show every two weeks. It was my personal game jam. I created a lot of odd games, one was a huge multi-screen breakout game, the other was a narrative game about someone being lost in a cave. The cave was procedurally generated and there was literately no way out. It also included a procedural swearing engine. I was also working on a little top down pixel art rpg game, but is was missing something. I went dinner with some other game designers at PAX that year and buried in a conversation someone said something to how they try and come up with wacky ideas for their new games. The next morning I woke thinking about the screen always scrolling, never stopping and the player needs to keep up. I hurriedly made those changes but it still didn’t feel right. Trying to aim and run while the screen scrolled felt like cognitive overload. I switched it so the firing and targeting was all automatic and the player just had to run, avoid enemies, and grab things for upgrades. There was a frantic energy to the game. The perfect party or steaming game. I finished up the prototype and took it to the prototyping meet-up and it was a big hit. Lots of laughing as the death was narrowly avoided and the screen never stopped moving. I was feeling pretty good about the game and decided to move it from a prototype to a real game. I knew I needed an artist but didn’t have the money to afford one. By pure coincidence I was talking to a new steam-like platform just coming on a scene about Thimbleweed Park and figured I’d ask about this game. I put together a quick video and a pitch email. You can see the video below. To my surprise they said yes, gave me some money and I was off. Side note: I recently did an interview for Death by Scrolling and they wanted to know if I was inspired to make Death by Scrolling after playing Vampire Survivors. Except for the auto-fire this game isn’t much like Vampire Survivors and I have to been working on it since 2018. So… I love Vampire Survivors, but no. I worked on the game for about 9 months and really struggled with progression. The core game was still a lot of fun but everything I put onto it to make it a deeper game wasn’t working. It was round this time that the possibility to make Return to Monkey Island came up and it seemed like an opportunity I couldn’t pass up. I was struggling with the game I called simply called “Runner” and it made sense to returned the money I had taken and move to Return to Monkey Island. I took all the engine improvements Derek and I had made and built Delores in prep for Return to Monkey Island all based on the Runner engine (but without the tile rendering). «INSERT MAKING RETURN TO MONKEY ISLAND MONTAGE HERE» Return to Monkey Island wrapped and I was once again thinking about something new. I had the idea of taking the pixel art tile engine from Runner and making an old school Zelda game (the only Zelda games I like). I hired an artist, brought on Elissa as a designer and we were off. A year into the game it became obvious that making an open world RPG was a lot of work and we didn’t have the resources (money) for that. I thought about Runner, dug up the video and sent it to Elissa and said “What if we made this? We could have it done in a less than a year.” She loved it and her epiphany was to forget about deep progression and just make it like an arcade game. In and out quickly and retain all the frantic fun of the original. As I was thinking about the game’s name Elissa died from the scrolling and the text “Death by Scrolling” appeared and she said that should be the name of the game. Perfect. A quick name change and Death by Scrolling was (re-)born. The theme of the game being about stuck in purgatory and purgatory being taken over by investment bankers and corporations for profit took hold and provided a nice framework for narration. A lot came together at the end and it all just made sense. It’s a game about greed and the never ending grind in life and death for more and more. The absurdity of social media even make an appearance when you die. The game is mirror into the world we live (and die) in. Death by Scrolling What was the original name of Death by Scrolling? What city was the prototype meet-up in? Who did I bring on to help with design? What game did I make between the prototype and Return to Monkey Island.

0 views
Anton Sten 5 days ago

Henry Ford's horse problem wasn't about imagination

>"If I had asked people what they wanted, they would have said faster horses." - Henry Ford (allegedly) This quote gets thrown around constantly—usually by someone who wants to justify ignoring user research entirely. The logic goes: users don't know what they want, so why bother asking them? The problem isn't the sentiment. It's that people are using it to defend bad research, not to avoid research altogether. Here's the thing: Henry Ford's mistake wasn't talking to users. It was asking the wrong question. ## The real problem with "faster horses" Let's assume Ford actually said this (there's no evidence he did, but let's run with it). The issue isn't that people asked for faster horses. It's that "What do you want?" is a terrible research question. Of course they said faster horses. That's the only frame of reference they had. But if Ford had dug deeper—if he'd asked about their actual problems instead of solutions—he would've heard something very different. Imagine if he'd asked: - What's frustrating about traveling with your horse? - Tell me about the last time you needed to go somewhere far away. - What stops you from traveling more often? - How does weather affect your trips? Suddenly you're not hearing "faster horses." You're hearing: - "I can't take my whole family without a carriage" - "Long rides leave me sore for days" - "I get soaked when it rains" - "My horse gets tired and needs rest" - "Feeding and caring for a horse is expensive" None of these answers mention cars. But every single one of them points directly to what a car solves. ## Good research doesn't ask for solutions The mistake most people make—and the one this quote reinforces—is thinking user research means asking users what to build. It doesn't. Good research uncovers problems. It reveals pain points. It helps you understand what people are actually struggling with in their daily lives. What they're working around. What they've given up on entirely. Users aren't supposed to design your product. That's your job. But they're the only ones who can tell you what's actually broken in their world. When you focus on understanding problems instead of collecting feature requests, you stop getting "faster horses" and start hearing real needs. ## Why this matters more now than ever Here's the irony: the same people who quote Henry Ford to avoid user research are now using AI to build products faster than ever. Which means they're building the wrong things faster than ever. The market is flooded with functional products that [solve problems nobody has](https://www.antonsten.com/books/products-people-actually-want/). Henry Ford couldn't build a car in a weekend. You can build a working app in hours with AI. The barrier to building dropped to zero. The barrier to understanding what people actually need? That stayed exactly the same. Which makes user research the only competitive advantage that matters. ## How to actually understand your users I've written before about [stakeholder interviews](https://www.antonsten.com/articles/stakeholder/) and the same principles apply to user research: **Ask about the past, not the future.** "Tell me about the last time you struggled with X" beats "What features would you want?" every time. **Focus on behavior, not opinions.** What people actually do matters more than what they say they'd do. Watch for workarounds—they reveal unmet needs. **Dig into the why.** When someone mentions a problem, ask why it matters. Then ask why again. The first answer is usually surface-level. The third or fourth answer is where the real insight lives. **Listen for emotion.** When someone's voice changes—frustration, relief, resignation—you've hit something that actually matters to them. None of this requires a PhD. It just requires showing up with curiosity instead of assumptions. ## The bottom line The Henry Ford quote isn't wrong because users can't imagine solutions. It's wrong because it defends lazy research. Great products don't come from avoiding users—they come from understanding them deeply. Not asking what they want, but understanding what they struggle with. What they're working around. What they've accepted as "just the way it is." That's how you build something people actually need instead of just another faster horse.

0 views
Manuel Moreale 1 weeks ago

Safari and iOS 26: PSA and a rant

The new iOS is bad in so many ways that writing a post highlighting them all is quite pointless. By the time I’d be done typing, they’d have likely released iOS 27 (and hopefully fixed most of this nonsense). So I’m not gonna waste time doing that and simply focus on one single thing that was so bad when I first upgraded that I was genuinely considering changing career: the new iOS UI. Look, I don’t really care about new UIs; I’m not one of those people who complain simply because things are different. I know software changes over time, that’s fine. But this UI is bad for one simple reason: you can’t access all tabs when using the phone one-handed in a convenient way. And before you start typing «Hey idiot, have you tried tapping that button with the three dots?» I can tell you that yes, I did. I know the missing options are there. But this means that literally every operation now takes two taps instead of one, and I also have to sit through an excruciatingly slow animation every time that stupid menu opens up. If, like me, you hate this, I just wanted to let you know that there is a solution. Go into settings -> apps -> Safari, scroll down a bit till you find the Tabs section and in there, there’s an option to change the UI with something that’s so much better. This is the end of the PSA. Now, let me rant. Look, I don’t think I’m an amazing designer. Or a designer at all these days. But I think I do possess at least one redeeming quality: some design-related common sense, thanks to a professor who, for 5 years, bashed me in the head constantly while I was studying design. The main purpose of a browser is to provide access to the web. You do that through a paradigm called tabs. It’s been like that for decades. Creating a tab, closing a tab, and moving through tabs are the minimum functionalities needed to have a proper browser UI. Ok, I guess you also need to have an address bar where to type something, but I consider that part of the tab. You cannot hide the controls for those interactions inside a menu. You just cannot. Imagine if the shutter button in your camera app was hidden behind a pop-up menu. You’d chuck that piece of shit of an app in the digital hell it belongs to. And for good reasons. If I’m using a browser, I need to be able to create a new tab with just one click. I need to be able to access all the open tabs in one click. That’s a non-negotiable imo. And this alternative Safari UI is not perfect, mind you. The new tab button is still hidden behind an extra tap, while the middle spot in that UI is taken up by a completely useless share button, because Apple is apparently run by people with infinite wisdom. And this is not fucking rocket science. Basically, every other browser out there is managing to do this just fine. New tab in the middle, arrows to navigate on one side, all tabs button on the right. The point of a UI in something like a browser is not to wow or to provide joy. The point is to fucking work. How about you first do that, and then you figure out how to pour all your stupid molten glass on top of it? Thank you for keeping RSS alive. You're awesome. Email me :: Sign my guestbook :: Support for 1$/month :: See my generous supporters :: Subscribe to People and Blogs

0 views
Jason Fried 1 weeks ago

When design drives behavior

In some cases, design is what something looks like. In other cases, design is how something works. But the most interesting designs to me are when design changes your behavior. Even the smallest details can change how someone interacts with something. Take the power reserve indicator on the A. Lange & Söhne Lange 1 watch. The power reserve indicator indicates how much "power" (wind) is left. It's pictured below on the right side of the dial. It starts with AUF ("up") and ends with AB ("down"). A fully wound Lange 1 (indicator up at AUF) will give you about 72 hours before the watch fully runs out of power, stops, and must be wound again. It moves down as the watch runs until you're out of power. Wind it again to fill it back up. Simple enough, right? An indicator and a scale for fully wound through unwound. Just like a car's fuel gauge. You have full through empty, with a few ticks in between to indicate 3/4 or 1/4 tank left, and typically a red zone at the end saying you really need to fill this thing up soon or you're going to be stranded. However, all is not as it seems on the Lange 1. There's something very clever going on here to change your behavior. First you'll notice five triangles between AUF and AUB. They aren't equally spaced. At first you might think it looks like each is about a quarter of the scale, and then the last two at the bottom would be like the red zone on your fuel gage. But no. The indicator follows a non-linear progression downwards. It doesn't sweep from top to bottom evenly over time. It's actually accelerated early. When fully wound, It takes just a day for the indicator to drop down two markers to the halfway point. From there, it takes a day each to hit the lower two markers. This makes it look like it's unwinding faster than it is because the indicator covers more distance in that first 24 hours. If the spacing were uniform, and the indicator was linear, the owner might not feel the need to wind it until the power reserve was nearly fully depleted. Then you might have a dead watch when you pick it up the next morning. So what's the net effect of this tiny little design detail that the owner may not even understand? Well, it looks like the watch is already half-way out of power after the first day, so it encourages the owner to wind the watch more frequently. To keep it closer to topped off, even when it's not necessary. This helps prevents the watch from running out of power, losing time, and, ultimately, stopping. A stopped watch may be right twice a day, but it's rarely at the times you want. Small detail, material behavior change. Well considered, well executed, well done. -Jason

0 views
Manuel Moreale 1 weeks ago

Blake Watson

This week on the People and Blogs series we have an interview with Blake Watson, whose blog can be found at blakewatson.com . Tired of RSS? Read this in your browser or sign up for the newsletter . The People and Blogs series is supported by Jaga Santagostino and the other 121 members of my "One a Month" club. If you enjoy P&B, consider becoming one for as little as 1 dollar a month. Sure! I’m Blake. I live in a small city near Jackson, Mississippi, USA. I work for MRI Technologies as a frontend engineer, building bespoke web apps for NASA. Previously I worked at an ad agency as an interactive designer. I have a neuromuscular condition called spinal muscular atrophy (SMA). It's a progressive condition that causes my muscles to become weaker over time. Because of that, I use a power wheelchair and a whole host of assistive technologies big and small. I rely on caregivers for most daily activities like taking a shower, getting dressed, and eating—just to name a few. I am able to use a computer on my own. I knew from almost the first time I used one that it was going to be important in my life. I studied Business Information Systems in college as a way to take computer-related courses without all the math of computer science (which scared me at the time). When I graduated, I had a tough time finding a job making websites. I did a bit of freelance work and volunteer work to build up a portfolio, but was otherwise unemployed for several years. I finally got my foot in the door and I recently celebrated a milestone of being employed for a decade . When I'm not working, I'm probably tinkering on side projects . I'm somewhat of a side project and home-cooked app enthusiast. I just really enjoy making and using my own tools. Over the last 10 years, I've gotten into playing Dungeons and Dragons and a lot of my side projects have been related to D&D. I enjoy design, typography, strategy games, storytelling, writing, programming, gamedev, and music. I got hooked on making websites in high school and college in the early 2000s. A friend of mine in high school had a sports news website. I want to say it was made with the Homestead site builder or something similar. I started writing for it and helping with it. I couldn’t get enough so I started making my own websites using WYSIWYG page builders. But I became increasingly frustrated with the limitations of page builders. Designing sites felt clunky and I couldn’t get elements to do exactly what I wanted them to do. I had a few blogs on other services over the years. Xanga was maybe the first one. Then I had one on Blogger for a while. In 2005, I took a course called Advanced Languages 1. It turned out to be JavaScript. Learning JavaScript necessitated learning HTML. Throughout the course I became obsessed with learning HTML, CSS, and JavaScript. Eventually, in August of 2005— twenty years ago —I purchased the domain blakewatson.com . I iterated on it multiple times a year at first. It morphed from quirky design to quirkier design as I learned more CSS. It was a personal homepage, but I blogged at other services. Thanks to RSS, I could list my recent blog posts on my website. When I graduated from college, my personal website became more of a web designer's portfolio, a professional site that I would use to attract clients and describe my services. But around that time I was learning how to use WordPress and I started a self-hosted WordPress blog called I hate stairs . It was an extremely personal disability-related and life journaling type of blog that I ran for several years. When I got my first full-time position and didn't need to freelance any longer, I converted blakewatson.com back into a personal website. But this time, primarily a blog. I discontinued I hate stairs (though I maintain an archive and all the original URLs work ). I had always looked up to various web designers in the 2000s who had web development related blogs. People like Jeffery Zeldman , Andy Clarke , Jason Santa Maria , and Tina Roth Eisenberg . For the past decade, I've blogged about web design, disability, and assistive tech—with the odd random topic here or there. I used to blog only when inspiration struck me hard enough to jolt my lazy ass out of whatever else I was doing. That strategy left me writing three or four articles a year (I don’t know why, but I think of my blog posts as articles in a minor publication, and this hasn’t helped me do anything but self-edit—I need to snap out of it and just post ). In March 2023, however, I noticed that I had written an article every month so far that year. I decided to keep up the streak. And ever since then, I've posted at least one article a month on my blog. I realize that isn't very frequent for some people, but I enjoy that pacing, although I wouldn't mind producing a handful more per year. Since I'm purposefully posting more, I've started keeping a list of ideas in my notes just so I have something to look through when it's time to write. I use Obsidian mostly for that kind of thing. The writing itself almost always happens in iA Writer . This app is critical to my process because I am someone who likes to tinker with settings and fonts and pretty much anything I can configure. If I want to get actual writing done, I need constraints. iA Writer is perfect because it looks and works great by default and has very few formatting options. I think I paid $10 for this app one time ten or more years ago. That has to be the best deal I've ever gotten on anything. I usually draft in Writer and then preview it on my site locally to proofread. I have to proofread on the website, in the design where it will live. If I proofread in the editor I will miss all kinds of typos. So I pop back and forth between the browser and the editor fixing things as I go. I can no longer type on a physical keyboard. I use a mix of onscreen keyboard and dictation when writing prose. Typing is a chore and part of the reason I don’t blog more often. It usually takes me several hours to draft, proofread, and publish a post. I mostly need to be at my desk because I have my necessary assistive tech equipment set up there. I romanticize the idea of writing in a comfy nook or at a cozy coffee shop. I've tried packing up my setup and taking it to a coffee shop, but in practice I get precious little writing done that way. What I usually do to get into a good flow state is put on my AirPods Pro, turn on noise cancellation, maybe have some ambient background noise or music , and just write. Preferably while sipping coffee or soda. But if I could have any environment I wanted, I would be sitting in a small room by a window a few stories up in a quaint little building from the game Townscaper , clacking away on an old typewriter or scribbling in a journal with a Parker Jotter . I've bounced around a bit in terms of tech stack, but in 2024, I migrated from a self-hosted WordPress site to a generated static site with Eleventy . My site is hosted on NearlyFreeSpeech.NET (NFSN)—a shared hosting service I love for its simplistic homemade admin system, and powerful VPS-like capabilities. My domain is registered with them as well, although I’m letting Cloudflare handle my DNS for now. I used Eleventy for the first time in 2020 and became a huge fan. I was stoked to migrate blakewatson.com . The source code is in a private repo on GitHub. Whenever I push to the main branch, DeployHQ picks it up and deploys it to my server. I also have a somewhat convoluted setup that checks for social media posts and displays them on my website by rebuilding and deploying automatically whenever I post. It's more just a way for me to have an archive of my posts on Mastodon than anything. Because my website is so old, I have some files not in my repo that live on my server. It is somewhat of a sprawling living organism at this point, with various small apps and tools (and even games !) deployed to sub-directories. I have a weekly scheduled task that runs and saves the entire site to Backblaze B2 . You know, I'm happy to say that I'd mostly do the same thing. I think everyone should have their own website. I would still choose to blog at my own domain name. Probably still a static website. I might structure things a bit differently. If I were designing it now, I might make more allowances for title-less, short posts (technically I can do this now, but they get lumped into my social feed, which I'm calling my Microblog, and kind of get lost). I might design it to be a little weirder rather than buttoned up as it is now. And hey, it's my website. I still might do that. Tinkering with your personal website is one of life's great joys. If you can't think of anything to do with your website, here are a hundred ideas for you . I don't make money from my website directly, but having a website was critical in getting my first job and getting clients before that. So, in a way, all the money I've made working could be attributed to having a personal website. I have a lot of websites and a lot of domains, so it's a little hard to figure out exactly what blakewatson.com itself costs. NFSN is a pay-as-you-go service. I'm currently hosting 13 websites of varying sizes and complexity, and my monthly cost aside from domains is about $23.49. $5 of that is an optional support membership. I could probably get the cost down further by putting the smaller sites together on a single shared server. I pay about $14 per year for the domain these days. I pay $10.50 per month for DeployHQ , but I use it for multiple sites including a for-profit side project, so it doesn’t really cost anything to use it for my blog (this is the type of mental gymnastics I like to do). I pay $15 per month for Fathom Analytics . In my mind, this is also subsidized by my for-profit side project. I mentioned that I backup my website to Backblaze B2. It's extremely affordable, and I think I'm paying below 50 cents per month currently for the amount of storage I'm using (and that also includes several websites). If you also throw in the cost of tools like Tower and Sketch , then there's another $200 worth of costs per year. But I use those programs for many things other than my blog. When you get down to it, blogs are fairly inexpensive to run when they are small and personal like mine. I could probably get the price down to free, save for the domain name, if I wanted to use something like Cloudflare Pages to host it—or maybe a free blogging service. I don't mind people monetizing their blogs at all. I mean if it's obnoxious then I'm probably not going to stay on your website very long. But if it's done tastefully with respect to the readers then good for you. I also don't mind paying to support bloggers in some cases. I have a number of subscriptions for various people to support their writing or other creative output. Here are some blogs I'm impressed with in no particular order. Many of these people have been featured in this series before. I'd like to take this opportunity to mention Anne Sturdivant . She was interviewed here on People & Blogs. When I first discovered this series, I put her blog in the suggestion box. I was impressed with her personal website empire and the amount of content she produced. Sadly, Anne passed away earlier this year. We were internet buddies and I miss her. 💜 I'd like to share a handful of my side projects for anyone who might be interested. Now that you're done reading the interview, go check the blog and subscribe to the RSS feed . If you're looking for more content, go read one of the previous 109 interviews . Make sure to also say thank you to Bomburache and the other 121 supporters for making this series possible. Chris Coyier . " Mediocre ideas, showing up, and persistence. " <3 Jim Nielsen . Continually produces smart content. Don't know how he does it. Nicole Kinzel . She has posted nearly daily for over two years capturing human struggles and life with SMA through free verse poetry. Dave Rupert . I enjoy the balance of tech and personal stuff and the honesty of the writing. Tyler Sticka . His blog is so clean you could eat off of it. A good mix of tech and personal topics. Delightful animations. Maciej Cegłowski . Infrequent and longform. Usually interesting regardless of whether I agree or disagree. Brianna Albers . I’m cheating because this is a column and not a blog per se. But her writing reads like a blog—it's personal, contemplative, and compelling. There are so very few representations of life with SMA online that I'd be remiss not to mention her. Daring Fireball . A classic blog I’ve read for years. Good for Apple news but also interesting finds in typography and design. Robb Knight . To me, Robb’s website is the epitome of the modern indieweb homepage. It’s quirky, fun, and full of content of all kinds. And that font. :chefskiss: Katherine Yang . A relatively new blog. Beautiful site design. Katherine's site feels fresh and experimental and exudes humanity. HTML for People . I wrote this web book for anyone who is interested in learning HTML to make websites. I wrote this to be radically beginner-friendly. The focus is on what you can accomplish with HTML rather than dwelling on a lot of technical information. A Fine Start . This is the for-profit side project I mentioned. It is a new tab page replacement for your web browser. I originally made it for myself because I wanted all of my favorite links to be easily clickable from every new tab. I decided to turn it into a product. The vast majority of the features are free. You only pay if you want to automatically sync your links with other browsers and devices. Minimal Character Sheet . I mentioned enjoying Dungeons and Dragons. This is a web app for managing a D&D 5th edition character. I made it to be a freeform digital character sheet. It's similar to using a form fillable PDF, except that you have a lot more room to write. It doesn't force many particular limitations on your character since you can write whatever you want. Totally free.

0 views
annie's blog 1 weeks ago

Two small UI things that might not bother me if I were a completely different person

But I am who I am and these two small very small really inconsequential things enrage me so here we are STOP IT. If I am logging in do you think I want the pre-login home page to stay open in a separate tab NO. I do NOT. I am here for one purpose and one purpose only and that is to login. Tabs are precious. I do not have any to waste on the prior page, the pointless page, the unused and unneeded pre-logged-in home page that you insist on keeping open in its own tab. Do you think I’m going to tab back to it and read your latest homepage copy or peruse the social proof or NO. I am NOT. I am ALREADY using the product that is why I am here to LOG IN. Quit target blanking the login button. Want to do action? Click this button here on the right side! Want to see things related to the action you just took or will most likely take next? No problem! Click this button. Where is it? On the right side near the last button you clicked? NO IT IS WAY OVER HERE ON THE LEFT SIDE! SURPRISE! Click it. Go ahead. Want to do the final action in this sequence of clicks which have to be clicked sequentially to do the thing? Okay! Click the third button. Where is it? Here? On the left side where we’re now putting buttons? NO! On the right side where the first button was? ALSO NO! It’s at the BOTTOM. You fool. You absolute idiot. Why didn’t you know that.

0 views
Anton Sten 1 weeks ago

From powerful to personal: Where design is heading

One of my favorite things about writing my newsletter is that it's not one-way. Most newsletters are—let's face it. But I get questions from readers that make me stop and think harder about things I thought I already had figured out. Alina sent me one of those questions recently: > "From what you've seen, how has design as a way to serve people changed during your career? I feel that in the past, design often showed how powerful a tool could be—it was more about showing what technology can do. Now it seems design is more personal: helping people get the tool they need right away. To me, that reflects a bigger social trend of asking, 'Who are you? What matters to you personally?'—almost a wave of psychological customization for each person." She nailed something I hadn't put into words yet. And I hope she's right—that design really is becoming more personal, more about helping people get what they need instead of showing off what's possible. ## The shift to personalization Personalization has quietly become one of the defining themes of the last few years. And it makes sense. Once you've experienced a solution that feels like it was built for you, why would you ever go back to something generic? The bar keeps rising. A personalized experience becomes the baseline. Then someone builds a *hyper*-personalized experience, and suddenly the old version feels stale. The only way to pull someone away from a tool they love is to offer them something even more tailored to their specific needs. And the next phase? Tools that are proactive instead of reactive. Not just responding to what you ask for, but surfacing things you didn't even know you were looking for yet. Showing you the answer before you've fully formed the question. AI is accelerating this in ways we're only starting to understand. It's not just about showing you content you might like or recommending products based on your browsing history. It's about adapting interfaces, interactions, and entire workflows to match how *you* think and work. We're moving past "one size fits all" and even past "a few sizes to choose from." We're heading toward "this was made for you, specifically." ## New surfaces, new possibilities But personalization isn't just about smarter algorithms. It's also about where and how we interact with technology. The Meta Ray-Ban glasses probably aren't *the* next big thing. But they're pointing in a direction that feels inevitable. Voice, gestures, wearables—these aren't novelties anymore. They're becoming legitimate interfaces. Designers are going to need to think beyond screens. What does personalization look like when the interface is a conversation? Or a glance? Or a gesture you make without thinking? This isn't science fiction. It's already starting to happen. And it's going to require us to rethink what "design" even means. ## Circling back So, Alina—I think you're onto something. Design really has shifted from "look what this can do" to "here's what this can do *for you*." And that shift isn't slowing down. If anything, it's accelerating. The question now isn't whether design will become more personal. It's how personal it can get before we start to feel like the tools know us a little *too* well. But that's a question for another post.

0 views
Lea Verou 2 weeks ago

In the economy of user effort, be a bargain, not a scam

Alan Kay [source] One of my favorite product design principles is Alan Kay’s “Simple things should be simple, complex things should be possible” . [1] I had been saying it almost verbatim long before I encountered Kay’s quote. Kay’s maxim is deceptively simple, but its implications run deep. It isn’t just a design ideal — it’s a call to continually balance friction, scope, and tradeoffs in service of the people using our products. This philosophy played a big part in Prism’s success back in 2012, helping it become the web’s de facto syntax highlighter for years, with over 2 billion npm downloads. Highlighting code on a page took including two files. No markup changes. Styling used readable CSS class names. Even adding new languages — the most common “complex” use case — required far less knowledge and effort than alternatives. At the same time, Prism exposed a deep extensibility model so plugin authors could patch internals and dramatically alter behavior. These choices are rarely free. The friendly styling API increased clash risk, and deep extensibility reduced encapsulation. These were conscious tradeoffs, and they weren’t easy. Simple refers to use cases that are simple from the user’s perspective , i.e. the most common use cases. They may be hard to implement, and interface simplicity is often inversely correlated with implementation simplicity. And which things are complex , depends on product scope . Instagram’s complex cases are vastly different than Photoshop’s complex cases, but as long as there is a range, Kay’s principle still applies. Since Alan Kay was a computer scientist, his quote is typically framed as a PL or API design principle, but that sells it short. It applies to a much, much broader class of interfaces. This class hinges on the distribution of use cases . Products often cut scope by identifying the ~20% of use cases that drive ~80% of usage — aka the Pareto Principle . Some products, however, have such diverse use cases that Pareto doesn’t meaningfully apply to the product as a whole. There are common use cases and niche use cases, but no clean 20-80 split. The long tail of niche use cases is so numerous, it becomes significant in aggregate . For lack of a better term, I’ll call these long‑tail UIs . Nearly all creative tools are long-tail UIs. That’s why it works so well for programming languages and APIs — both are types of creative interfaces. But so are graphics editors, word processors, spreadsheets, and countless other interfaces that help humans create artifacts — even some you would never describe as creative. Yes, programming languages and APIs are user interfaces . If this surprises you, watch my DotJS 2024 talk titled “API Design is UI Design” . It’s only 20 minutes, but covers a lot of ground, including some of the ideas in this post. I include both code and GUI examples to underscore this point; if the API examples aren’t your thing, skip them and the post will still make sense. You wouldn’t describe Google Calendar as a creative tool, but it is a tool that helps humans create artifacts (calendar events). It is also a long-tail product: there is a set of common, conceptually simple cases (one-off events at a specific time and date), and a long tail of complex use cases (recurring events, guests, multiple calendars, timezones, etc.). Indeed, Kay’s maxim has clearly been used in its design. The simple case has been so optimized that you can literally add a one hour calendar event with a single click (using a placeholder title). A different duration can be set after that first click through dragging [2] . But almost every edge case is also catered to — with additional user effort. Google Calendar is also an example of an interface that digitally encodes real-life, demonstrating that complex use cases are not always power user use cases . Often, the complexity is driven by life events. E.g. your taxes may be complex without you being a power user of tax software, and your family situation may be unusual without you being a power user of every form that asks about it. The Pareto Principle is still useful for individual features , as they tend to be more narrowly defined. E.g. there is a set of spreadsheet formulas (actually much smaller than 20%) that drives >80% of formula usage. While creative tools are the poster child of long-tail UIs, there are long-tail components in many transactional interfaces such as e-commerce or meal delivery (e.g. result filtering & sorting, product personalization interfaces, etc.). Filtering UIs are another big category of long-tail UIs, and they involve so many tradeoffs and tough design decisions you could literally write a book about just them. Airbnb’s filtering UI here is definitely making an effort to make simple things easy with (personalized! 😍) shortcuts and complex things possible via more granular controls. Picture a plane with two axes: the horizontal axis being the complexity of the desired task (again from the user’s perspective, nothing to do with implementation complexity), and the vertical axis the cognitive and/or physical effort users need to expend to accomplish their task using a given interface. Following Kay’s maxim guarantees these two points: But even if we get these two points — what about all the points in between? There are a ton of different ways to connect them, and they produce vastly different overall user experiences. How does your interface fare when a use case is only slightly more complex? Are users yeeted into the deep end of interface complexity (bad), or do they only need to invest a proportional, incremental amount of effort to achieve their goal (good)? Meet the complexity-to-effort curve , the most important usability metric you’ve never heard of. For delightful user experiences, making simple things easy and complex things possible is not enough — the transition between the two should also be smooth. You see, simple use cases are the spherical cows in space of product design . They work great for prototypes to convince stakeholders, or in marketing demos, but the real world is messy . Most artifacts that users need to create to achieve their real-life goals rarely fit into your “simple” flows completely, no matter how well you’ve done your homework. They are mostly simple — with a liiiiitle wart here and there. For a long-tail interface to serve user needs well in practice , we also need to design the curve, not just its endpoints . A model with surprising predictive power is to treat user effort as a currency that users are spending to buy solutions to their problems. Nobody likes paying it; in an ideal world software would read our mind and execute perfectly with zero user effort. Since we don’t live in such a world, users are typically willing to pay more in effort when they feel their use case warrants it. Just like regular pricing, actual user experience often depends more on the relationship between cost and expectation (budget) than on the absolute cost itself. If you pay more than you expected, you feel ripped off. You may still pay it because you need the product in the moment, but you’ll be looking for a better deal in the future. And if you pay less than you expected, you feel like you got a bargain, with all the delight and loyalty that entails. Incremental user effort cost should be proportional to incremental value gained. Suppose you’re ordering pizza. You want a simple cheese pizza with ham and mushrooms. You use the online ordering system, and you notice that adding ham to your pizza triples its price. We’re not talking some kind of fancy ham where the pigs were fed on caviar and bathed in champagne, just a regular run-of-the-mill pizza topping. You may still order it if you’re starving and no other options are available, but how does it make you feel? It’s not that different when the currency is user effort. The all too familiar “ But I just wanted to _________, why is it so hard? ”. When a slight increase in complexity results in a significant increase in user effort cost, we have a usability cliff . Usability cliffs make users feel resentful, just like the customers of our fictitious pizza shop. A usability cliff is when a small increase in use case complexity requires a large increase in user effort. Usability cliffs are very common in products that make simple things easy and complex things possible through entirely separate flows with no integration between them: a super high level one that caters to the most common use case with little or no flexibility, and a very low-level one that is an escape hatch: it lets users do whatever, but they have to recreate the solution to the simple use case from scratch before they can tweak it. Simple things are certainly easy: all we need to get a video with a nice sleek set of controls that work well on every device is a single attribute: . We just slap it on our element and we’re done with a single line of HTML: Now suppose use case complexity increases just a little . Maybe I want to add buttons to jump 10 seconds back or forwards. Or a language picker for subtitles. Or just to hide the volume control on a video that has no audio track. None of these are particularly niche, but the default controls are all-or-nothing: the only way to change them is to reimplement the whole toolbar from scratch, which takes hundreds of lines of code to do well. Simple things are easy and complex things are possible. But once use case complexity crosses a certain (low) threshold, user effort abruptly shoots up. That’s a usability cliff. For Instagram’s photo editor, the simple use case is canned filters, whereas the complex ones are those requiring tweaking through individual low-level controls. However, they are implemented as separate flows: you can tweak the filter’s intensity , but you can’t see or adjust the primitives it’s built from. You can layer both types of edits on the same image, but they are additive, which doesn’t work well. Ideally, the two panels would be integrated, so that selecting a filter would adjust the low-level controls accordingly, which would facilitate incremental tweaking AND would serve as a teaching aid for how filters work. My favorite end-user facing product that gets this right is Coda , a cross between a document editor, a spreadsheet, and a database. All over its UI, it supports entering formulas instead of raw values, which makes complex things possible. To make simple things easy, it also provides the GUI you’d expect even without a formula language. But here’s the twist: these presets generate formulas behind the scenes that users can tweak ! Whenever users need to go a little beyond what the UI provides, they can switch to the formula editor and adjust what was generated — far easier than writing it from scratch. Another nice touch: “And” is not just communicating how multiple filters are combined, but is also a control that lets users edit the logic. Defining high-level abstractions in terms of low-level primitives is a great way to achieve a smooth complexity-to-effort curve, as it allows you to expose tweaking at various intermediate levels and scopes. The downside is that it can sometimes constrain the types of high-level solutions that can be implemented. Whether the tradeoff is worth it depends on the product and use cases. If you like eating out, this may be a familiar scenario: — I would like the rib-eye please, medium-rare. — Thank you sir. How would you like your steak cooked? Keep user effort close to the minimum necessary to declare intent Annoying, right? And yet, this is how many user interfaces work; expecting users to communicate the same intent multiple times in slightly different ways. If incremental value should require incremental user effort , an obvious corollary is that things that produce no value should not require user effort . Using the currency model makes this obvious: who likes paying without getting anything in return? Respect user effort. Treat it as a scarce resource — just like regular currency — and keep it close to the minimum necessary to declare intent . Do not require users to do work that confers them no benefit, and could have been handled by the UI. If it can be derived from other input, it should be derived from other input. Source: NNGroup (adapted). A once ubiquitous example that is thankfully going away, is the credit card form which asks for the type of credit card in a separate dropdown. Credit card numbers are designed so that the type of credit card can be determined from the first four digits. There is zero reason to ask for it separately. Beyond wasting user effort, duplicating input that can be derived introduces an unnecessary error condition that you now need to handle: what happens when the entered type is not consistent with the entered number? User actions that meaningfully communicate intent to the interface are signal . Any other step users need to take to accomplish their goal, is noise . This includes communicating the same input more than once, providing input separately that could be derived from other input with complete or high certainty, transforming input from their mental model to the interface’s mental model, and any other demand for user effort that does not serve to communicate new information about the user’s goal. Some noise is unavoidable. The only way to have 100% signal-to-noise ratio would be if the interface could mind read. But too much noise increases friction and obfuscates signal. A short yet demonstrative example is the web platform’s methods for programmatically removing an element from the page. To signal intent in this case, the user needs to communicate two things: (a) what they want to do (remove an element), and (b) which element to remove. Anything beyond that is noise. The modern DOM method has an extremely high signal-to-noise ratio. It’s hard to imagine a more concise way to signal intent. However, the older method that it replaced had much worse ergonomics. It required two parameters: the element to remove, and its parent. But the parent is not a separate source of truth — it would always be the child node’s parent! As a result, its actual usage involved boilerplate , where developers had to write a much noisier [3] . Boilerplate is repetitive code that users need to include without thought, because it does not actually communicate intent. It’s the software version of red tape : hoops you need to jump through to accomplish your goal, that serve no obvious purpose in furthering said goal except for the fact that they are required. In this case, the amount of boilerplate may seem small, but when viewed as a percentage of the total amount of code, the difference is staggering. The exact ratio (81% vs 20% here) varies based on specifics such as variable names, but when the difference is meaningful, it transcends these types of low-level details. Of course, it was usually encapsulated in utility functions, which provided a similar signal-to-noise ratio as the modern method. However, user-defined abstractions don’t come for free, there is an effort (and learnability) tax there, too. Improving signal-to-noise ratio is also why the front-end web industry gravitated towards component architectures: they increase signal-to-noise ratio by encapsulating boilerplate. As an exercise for the reader, try to calculate the signal-to-noise ratio of a Bootstrap accordion (or any other complex Bootstrap component). Users are much more vocal about things not being possible, than things being hard. When pointing out friction issues in design reviews , I have sometimes heard “ users have not complained about this ”. This reveals a fundamental misunderstanding about the psychology of user feedback . Users are much more vocal about things not being possible, than about things being hard. The reason becomes clear if we look at the neuroscience of each. Friction is transient in working memory (prefrontal cortex). After completing a task, details fade. The negative emotion persists and accumulates, but filing a complaint requires prefrontal engagement that is brief or absent. Users often can’t articulate why the software feels unpleasant: the specifics vanish; the feeling remains. Hard limitations, on the other hand, persist as conscious appraisals. The trigger doesn’t go away, since there is no workaround, so it’s far more likely to surface in explicit user feedback. Both types of pain points cause negative emotions, but friction is primarily processed by the limbic system (emotion), whereas hard limitations remain in the prefrontal cortex (reasoning). This also means that when users finally do reach the breaking point and complain about friction, you better listen. Friction is primarily processed by the limbic system, whereas hard limitations remain in the prefrontal cortex Second, user complaints are filed when there is a mismatch in expectations . Things are not possible but the user feels they should be, or interactions cost more user effort than the user had budgeted, e.g. because they know that a competing product offers the same feature for less (work). Often, users have been conditioned to expect poor user experiences, either because all options in the category are high friction, or because the user is too novice to know better [4] . So they begrudgingly pay the price, and don’t think they have the right to complain, because it’s just how things are. You might ask, “If all competitors are equally high-friction, how does this hurt us?” An unmet need is a standing invitation to disruption that a competitor can exploit at any time. Because you’re not only competing within a category; you’re competing with all alternatives — including nonconsumption (see Jobs‑to‑be‑Done ). Even for retention, users can defect to a different category altogether (e.g., building native apps instead of web apps). Historical examples abound. When it comes to actual currency, a familiar example is Airbnb : Until it came along, nobody would complain that a hotel of average price is expensive — it was just the price of hotels. If you couldn’t afford it, you just couldn’t afford to travel, period. But once Airbnb showed there is a cheaper alternative for hotel prices as a whole , tons of people jumped ship. It’s no different when the currency is user effort. Stripe took the payment API market by storm when it demonstrated that payment APIs did not have to be so high friction. iPhone disrupted the smartphone market when it demonstrated that no, you did not have to be highly technical to use a smartphone. The list goes on. Unfortunately, friction is hard to instrument. With good telemetry you can detect specific issues (e.g., dead clicks), but there is no KPI to measure friction as a whole. And no, NPS isn’t it — and you’re probably using it wrong anyway . Instead, the emotional residue from friction quietly drags many metrics down (churn, conversion, task completion), sending teams in circles like blind men touching an elephant . That’s why dashboards must be paired with product vision and proactive, first‑principles product leadership . Steve Jobs exemplified this posture: proactively, aggressively eliminating friction presented as “inevitable.” He challenged unnecessary choices, delays, and jargon, without waiting for KPIs to grant permission. Do mice really need multiple buttons? Does installing software really need multiple steps? Do smartphones really need a stylus? Of course, this worked because he had the authority to protect the vision; most orgs need explicit trust to avoid diluting it. So, if there is no metric for friction, how do you identify it? Reducing friction rarely comes for free, just because someone had a good idea. These cases do exist, and they are great, but it usually takes sacrifices. And without it being an organizational priority, it’s very hard to steer these tradeoffs in that direction. The most common tradeoff is implementation complexity. Simplifying user experience is usually a process of driving complexity inwards and encapsulating it in the implementation. Explicit, low-level interfaces are far easier to implement, which is why there are so many of them. Especially as deadlines loom, engineers will often push towards externalizing complexity into the user interface, so that they can ship faster. And if Product leans more data-driven than data-informed, it’s easy to look at customer feedback and conclude that what users need is more features ( it’s not ) . The first faucet is a thin abstraction : it exposes the underlying implementation directly, passing the complexity on to users, who now need to do their own translation of temperature and pressure into amounts of hot and cold water. It prioritizes implementation simplicity at the expense of wasting user effort. The second design prioritizes user needs and abstracts the underlying implementation to support the user’s mental model. It provides controls to adjust the water temperature and pressure independently, and internally translates them to the amounts of hot and cold water. This interface sacrifices some implementation simplicity to minimize user effort. This is why I’m skeptical of blanket calls for “simplicity.”: they are platitudes. Everyone agrees that, all else equal, simpler is better. It’s the tradeoffs between different types of simplicity that are tough. In some cases, reducing friction even carries tangible financial risks, which makes leadership buy-in crucial. This kind of tradeoff cannot be made by individual designers — it requires usability as a priority to trickle down from the top of the org chart. The Oslo airport train ticket machine is the epitome of a high signal-to-noise interface. You simply swipe your credit card to enter and you swipe your card again as you leave the station at your destination. That’s it. No choices to make. No buttons to press. No ticket. You just swipe your card and you get on the train. Today this may not seem radical, but back in 2003, it was groundbreaking . To be able to provide such a frictionless user experience, they had to make a financial tradeoff: it does not ask for a PIN code, which means the company would need to simply absorb the financial losses from fraudulent charges (stolen credit cards, etc.). When user needs are prioritized at the top, it helps to cement that priority as an organizational design principle to point to when these tradeoffs come along in the day-to-day. Having a design principle in place will not instantly resolve all conflict, but it helps turn conflict about priorities into conflict about whether an exception is warranted, or whether the principle is applied correctly, both of which are generally easier to resolve. Of course, for that to work everyone needs to be on board with the principle. But here’s the thing with design principles (and most principles in general): they often seem obvious in the abstract, so it’s easy to get alignment in the abstract. It’s when the abstract becomes concrete that it gets tough. The Web Platform has its own version of this principle, which is called Priority of Constituencies : “User needs come before the needs of web page authors, which come before the needs of user agent implementors, which come before the needs of specification writers, which come before theoretical purity.” This highlights another key distinction. It’s more nuanced than users over developers; a better framing is consumers over producers . Developers are just one type of producer. The web platform has multiple tiers of producers: Even within the same tier there are producer vs consumer dynamics. When it comes to web development libraries, the web developers who write them are producers and the web developers who use them are consumers. This distinction also comes up in extensible software, where plugin authors are still consumers when it comes to the software itself, but producers when it comes to their own plugins. It also comes up in dual sided marketplace products (e.g. Airbnb, Uber, etc.), where buyer needs are generally higher priority than seller needs. In the economy of user effort, the antithesis of overpriced interfaces that make users feel ripped off are those where every bit of user effort required feels meaningful and produces tangible value to them. The interface is on the user’s side, gently helping them along with every step, instead of treating their time and energy as disposable. The user feels like they’re getting a bargain : they get to spend less than they had budgeted for! And we all know how motivating a good bargain is. User effort bargains don’t have to be radical innovations; don’t underestimate the power of small touches. A zip code input that auto-fills city and state, a web component that automatically adapts to its context without additional configuration, a pasted link that automatically defaults to the website title (or the selected text, if any), a freeform date that is correctly parsed into structured data, a login UI that remembers whether you have an account and which service you’ve used to log in before, an authentication flow that takes you back to the page you were on before. Sometimes many small things can collectively make a big difference. In some ways, it’s the polar opposite of death by a thousand paper cuts : Life by a thousand sprinkles of delight! 😀 In the end, “ simple things simple, complex things possible ” is table stakes. The key differentiator is the shape of the curve between those points. Products win when user effort scales smoothly with use case complexity, cliffs are engineered out, and every interaction declares a meaningful piece of user intent . That doesn’t just happen by itself. It involves hard tradeoffs, saying no a lot, and prioritizing user needs at the organizational level . Treating user effort like real money, forces you to design with restraint. A rule of thumb is place the pain where it’s best absorbed by prioritizing consumers over producers . Do this consistently, and the interface feels delightful in a way that sticks. Delight turns into trust. Trust into loyalty. Loyalty into product-market fit. Kay himself replied on Quora and provided background on this quote . Don’t you just love the internet? ↩︎ Yes, typing can be faster than dragging, but minimizing homing between input devices improves efficiency more, see KLM ↩︎ Yes, today it would have been , which is a little less noisy, but this was before the optional chaining operator. ↩︎ When I was running user studies at MIT, I’ve often had users exclaim “I can’t believe it! I tried to do the obvious simple thing and it actually worked!” ↩︎

1 views
Thomasorus 2 weeks ago

Mandala

I had the idea while I was in a train for Paris in late November 2023. I was trying to find new ways to play with my favorite topic of the time: human, cats, skeletons. The initial concept was « a mandala of cats » to which I added a Mary pose for the character. The second sketch was made on A2 paper. On the topic of Night on Bald Mountain, check its amazing concept art by by Bill Tytla . The sketch was then left untouched for a few months, as a lot of details felt wrong and I didn't know how to approach the inking. More than ever, I felt the gigantic hair strands were going too far from the initial idea and were too distracting. I started iterating on the sketch using a tablet. I did several tests: removing hair from the body, removing most strands, and more. The A2 paper sheet was then scanned by a professional, retouched to remove imperfections and add contrast, and a black background with a white outline.

0 views
Thomasorus 2 weeks ago

Drool

The idea came from an inktober 2022 prompt: dream. I had this classic idea of being hunted by a beast in your sleep, which is shown in the initial sketches: I didn't thought about it at the time, but the inspiration was probably The Nightmare by Henry Fuseli: But after that, I thought it was too nightmarish, and decided to replace the "beast" with a cat (the inspiration was a Devon Rex). I also re-framed everything into the page. As for the inking, it was done with a chinese type brush and black ink. I had a lot of fun doing this piece, which encouraged me to continue with the same theme later.

0 views
Manuel Moreale 4 weeks ago

RIP my minimal phone setup

As you probably know by now, thanks to the infinite supply of news on the subject, today new OS versions came out for Apple gadgets. Yes, it’s the one with that idiot Liquid Glass. Yes, I hate it. No, I don’t hate it because it’s different from what I was used to before. And you know why? Because I was hating the previous one as well. «Why are you still using it then?» I hear you say. Because I have no good alternatives. Most of the tools I use are developed exclusively for this ecosystem, and those are tools I love to use. Plus, Windows is not any better, and I don’t have time to deal with anything Linux. So yeah, it is what it is. I’ll get used to all this nonsense on MacOS, from the insanely big rounded corners to the awful design choices. Something I won’t get used to, though, is the home screen on my phone. For the past couple of years, I was running with a setup that looked like this: This empty screen was achieved with a workaround, using a combination of a purposely designed wallpaper and a few accessibility settings. And I loved it. The fact that my home screen was empty was making me so happy. The only way I was interacting with my phone was by swiping down and using Spotlight. But now, in their infinite wisdom, the fine folks at Apple have decided that everything on this stupid device needs to show fake reflections, which means the empty dock is now back because fuck me for using the phone in a weird way, I guess. Thank you, Tim Apple. Thank you for keeping RSS alive. You're awesome. Email me :: Sign my guestbook :: Support for 1$/month :: See my generous supporters :: Subscribe to People and Blogs

0 views
Cassidy Williams 4 weeks ago

Playing with Fliiip Book

I learned about Fliiip Book on the internet recently and it’s pretty cool. It’s “a simple gif animation app for the web” and does what it says on the tin! It’s free, and has features like: I haven’t really played with an animation tool properly before. This was great because it’s small and approachable, while also clear on how much it can do. I used to love taking physical notepads and making little flip books with them growing up, and so this made me feel nostalgic while also learning a bunch. Great combo, if you ask me. Here’s a little gif I made in a few minutes! The creator, Jonathan , has some other cool projects on his website like Drawww Time and Paint List . I love seeing tiny powerful tools. Credit to Stef Walter for sharing this one! See ya next time.

0 views
Dominik Weber 4 weeks ago

Rules for creating good-looking user interfaces, from a developer

Creating good-looking user interfaces has always been a struggle for me. If you're in the same camp, this might help. I recently redesigned [Lighthouse](https://lighthouseapp. io/), and during that process built a system that helped me create much better designs than I ever did before. This system is about achieving the best possible design with the least amount of effort

1 views

Custom for designing, off-the-shelf for shipping

As software engineers, we're paid to write really cool type annotations solve problems. Usually we do this by taking a bunch of different pieces and putting them together to solve the problem. Maybe you mix together a database, a queue, a web framework, and some business logic. Or maybe you design a new storage engine, your own web framework, and a custom cache. It's an engineering question to determine which way is the right way. Should you build custom things? Or should you use off-the-shelf existing pieces? There is no general answer for that, of course. It's dependent on your situation. But there is a pattern that I've found helpful for problem-solving which balances the two approaches. You use as many custom components as you like for designing a solution, and then you use (mostly) off-the-shelf components for what you're going to ship . This technique helps a lot when you aren't sure what the solution will look like. If you try to design a solution using off-the-shelf solutions here, you may run into a couple of problems. First is that it's just a weird solution space, and you have to move in pre-defined step sizes. Second, though, is that you might need a custom component. If you need just one , when you're designing with off-the-shelf components, how will you realize that? And how will you know where that one custom component should go? Besides, how do you even know that any solution is possible? Designing with custom components allows you to get an existence proof [1] that the problem is solvable. You don't need to worry about a good solution, one that's viable. You first need to worry about any solution, as complicated as you like. If you can put together all these custom things you know you could build, then you know that some path exists! Custom components are also really helpful when a part exists but you don't know it exists. You have a problem, you know that it would help you to have something that can solve it. If you haven't solved that problem before, how would you know that a solution does exist? You look at it with custom components, and then that can lead you toward discovering the existing components. After you've designed a solution, you move on to refining the solution. It's ideal if you can build something entirely using off-the-shelf components, because those exist! You don't have to reinvent them, and it's probably cheaper to use them [2] . You can look at each of your custom components and start to ask: why is this custom? Maybe it needs to be, but more often, what it's solving is similar to something someone else has solved. You can look for those related tools and related problems, and find those solutions. Then slide a solution in in place of your component! Occasionally, you will find something where an off-the-shelf component does not exist which is equivalent to your custom one. Then you start to ask, okay, did I solve this problem wrong? I begin at the assumption that I'm not in a totally unique problem space. Then I look at how other people solved this problem, or why they didn't have to . What is it that people are doing that's different here so they don't run into it? And then if you get through that, you may actually have a unique new problem! And you get to keep that custom component in your design. But along the way, you moved a lot of custom work into using off-the-shelf components. Take a break, give yourself a pat on the back, then get back to work making money for corporate overlords at the cost of your health have fun building! Despite doing most of my problem solving in software, the example I want to share is a physical one (which inspired this post). I recently rebuilt my ergonomic setup again, my fifth iteration. This time, it is made of mostly off-the-shelf parts with one custom part. The first version was very much an existence proof that a way existed to use my laptop "portably" with my ergonomic keyboard. It wasn't great, and it didn't solve portability really, but it gestured at the solutions. My second version was the real existence proof, and it went almost fully custom. Off-the-shelf I used a tripod z tilt head, and I made the tray and laptop holder myself (I'm not counting the keyboard or laptop, since I'm building a solution around them). My third version used only custom components, and showed me it's possible! The fourth version used more custom components in a different arrangement. And now my new version? It's mostly off-the-shelf components. I didn't know most of these existed at all when I started on the rig a couple of years ago. Instead of a tray with grooves in it for my keyboard to slide on them, or velcro to hold it down, I got camera equipment! It uses two camera rods, two mounting blocks for those, two z-mount tripod heads, a "magic arm", and a tripod laptop holder tray. And a small custom component: a little wood piece that keeps it balanced, essentially outriggers. It's probably not done, though. There will surely be a sixth iteration. If nothing else, I want to replace the laptop holder. This one is a little too heavy; the rig as a whole is serviceable, but it would be nice to make it a little lighter for travel. So go forth and build things. Feel free to use as many custom components as you want when designing, but then think about if you can do it with off-the-shelf components when you want to be able to ship it. Of course, if my boss is reading this, reverse all the advice. You know I need to build us a new database in Rust. C'mon. My math degree is leaking out. An existence proof shows that something exists, ideally by providing a concrete example or giving a way to produce such a thing. I've found this concept very helpful in designing software, because you can break problem solving into two phases: first prove it's possible, then find a good solution. ↩ Large companies will often end up building their own custom versions of off-the-shelf components, once there is enough scale for it to work out. One example of this is Apple. They used Intel's CPUs for a long time, and then eventually designed their own once it made enough sense. Smaller companies generally cannot make this work. ↩

0 views
ava's blog 1 months ago

recent stuff [photo dump]

I feel super duper tired writing this, and I am spending most of today in bed or lazily on my desk; but I felt like uploading some images from recently and writing about it. Firstly, I reorganized some of my desk area . I had purchased a tapestry from Karen Cheok ('daixykaren') in 2019 but had never hung it up. It was an impulsive purchase and I really loved the design, but had a hard time fitting it into my place's space and design. But now, the time had come: I just said fuck it and changed some things around to make it work, and let go of my very minimalistic and white design principles. I used to have a very blank, white, gray and empty space intentionally to not have so much visual clutter and to make cleaning very easy. I found that by finally getting diagnosed and treated for my chronic illnesses and the resulting wellness and energy, I do not have to rely as much on these roundabout coping mechanisms to conserve energy or make everything as easy as possible :) Also, having my wife around me a lot, who is a very clutter-y person with lots of possessions, desensitized me a little. Now I wanted an inspiring space, a personal-feeling one, that also made it easier for me to create ; all my markers and washi tape and stickers already on the desk instead of hidden away in a drawer, and showing off some of my new plushies that I'll get into later. I moved my magnetic board over to the other wall and made some other minor adjustments. This is the fullest my desk has ever been, and the busiest my walls have ever been. I will definitely iron that tapestry soon, but I wanted it up before that, as I had to wait for my wife to bring the iron from her place. She thankfully sewed some loops into the fabric so I could hang it without punching holes in. As you can see, I have also recently tried out blind boxes and a mystery bag . I know what you’re probably thinking. Don’t worry, no Labubu ;) There’s a lot to be said about blind boxes 1 . Consumerist trends. Overconsumption. Lootboxes in real life. Gambling for children, Gacha, Dopamine, Artificial Scarcity, Addiction, FOMO... And it’s all true! I guess you could say the Kinder surprise chocolate eggs and Happy Meal surprise toys primed me for this as a child. No, actually, while I did have those as a child, these are my first real blind boxes, or what’s meant with ‘blind boxes’ online right now. Of course this isn’t new. I used to spend money on Overwatch lootboxes and still open Magic the Gathering boosters sometimes… I wanted more keychain/bag plushies, and these blind boxes had nice possible options. I made sure not to pick any that only had one possible item I like. That would just set me up for failure and an intense amount of spending. Instead, I liked all possible options . Probably not an equal amount in each case, but I knew I’d be happy either way. I’m not looking to get a specific one or to get a rare and I don’t want to start a collection - that’s how they get ya. Honestly, sometimes I can’t decide what option I want, so random luck choosing for me is actually good. So I did it. Some of the loot: I was also at gamescom getting a Cinnamoroll mystery bag. I was lucky - the contents seem like it was made for me. Plushie that I like, toiletries bag that I have a good use for, and bandaids, which I need for my biweekly injections. Perfect! I saw so many plushies at gamescom and Main Matsuri but didn’t buy any because I couldn’t commit to a choice. Now I’m settled. I’m done purchasing any now; got enough to last me decades. I might change my mind if it’s Mocha, Poron, Piano or Big Challenges, because those never really get much or any merch, but I don’t hold out much hope for that anyway. My wife and a friend recently discussed the best attitude around opening MtG boosters: Not opening them expecting a specific card or something expensive, but instead an experience akin to lifting a big log or stone to see what insects are underneath and being happy watching them. I feel the same way about these blind boxes and mystery bags - just casually checking out what’s under that big stone and thinking “That’s sweet” whatever it might be. I've also splurged on some books lately. Felt lucky to find some things that were on my list to read! I'm already done with Algospeak and it's been an entertaining and in parts educational read. I had assumed it would dive a little deeper overall, but I still liked it a lot. Next up is Philosophie des Digitalen . Other than that, some quick points: Reply via email Published 08 Sep, 2025 If you don’t know what they are, bless you. They are boxes you can’t see inside and the outside shows you the different options of what could be inside. Plushies, vinyl figurines, and more. There’s usually one mystery or rare one, too. Of course, they often have one amazing item and like 7 other trashy options and everyone buys boxes until they get the good one. Even if it’s more fairly designed, people still have favorites they chase, of course. People sell the contents for a high price, especially if it’s a rare or mystery item, and some go so far as to weigh boxes at the store with a food scale to have a better guess on what box holds their favorite. Blind box opening content is popular online for the excitement, similar to how Pokémon booster opening is, or unboxing a new product, or presenting a huge haul. Having an expensive and rare edition is treated like a status symbol. ↩

0 views
Sean Goedecke 1 months ago

'Make invalid states unrepresentable' considered harmful

One of the most controversial things I believe about good software design is that your code should be more flexible than your domain model . This is in direct opposition to a lot of popular design advice, which is all about binding your code to your domain model as tightly as possible. For instance, a popular principle for good software design is to make invalid states unrepresentable

0 views
Grumpy Gamer 1 months ago

Death By Scrolling Level Design

Hi there! I’m Elissa, and I’m the other designer on Death by Scrolling and doing a guest post this week. It’s technically my second project with Ron now, and when I’m not designing my own Roguelike (Dungeons of Freeport), or other games such as Deck & Conn, I’m drinking coffee and fighting drop-bears here here in the sunbaked land of Australia. If you want to follow me on social media, I’m on Mastodon primarily at @[email protected] and on Bluesky sometimes at @elissablack.com A confession to make. I started writing this blog post, got a ways in, and then realized there was a critical problem with it: almost nobody reading the post would have any idea just how Death by Scrolling actually plays, so it’d probably wash right on over them producing a painted-on polite smile. So here I am, back at the start, suddenly finding myself giving the elevator pitch and basic game play description of the game. It’s also easier now that some game play footage as been released. Death by Scrolling is a vertically scrolling action-roguelike game. TesterTron3000 playing Death by Scrolling You select one of several different characters and progress through increasingly long and densely populated levels full of villainous nasties, treasures, gold coins, traps, collectables, and simple puzzles. At the end of each level you get a brief moment of respite at a camp where you can pick up and buy powerups, take or turn in quests, and go make another tea in the kitchen before returning to your computer before venturing ever-further into the fantastical worlds of Purgatory. At first glance, the game doesn’t look like a Roguelike. Even in the most loose definition of the term - it’s vertically scrolling and action-driven. If anything, it seems to have more in common with something like River Raid or 1942 than a dungeon crawler. But to me, where it starts to show its lineage is when it comes to do level design in the game. In terms of my work on the project, I’m designing & writing the game with Ron, but probably the majority of my time is spent doing the level design. As such, I felt like that was a good place to start when writing a guest blog post - I could focus on one of the only things I actually do more than Ron on the game. In the most superficial sense, the game’s levels are top-down 2d level prefabs designed in Tiled , a very useful open-source tile-based map editor, and stitched together at run-time by the game. The individual pieces (we refer to them as prefabs) each have different bits of meta data attached to them such as their Land (or biome), what kind of prefab they are, what other prefabs they can attach to and what the probability is that they might appear, what mobs can spawn, etc. For instance, a very simple, short bit of green grass with a small hill and some simple decorations might be pretty common, and appear regardless of what level you’re at, where-as a more complex prefab featuring a maze may be rare, limited to higher levels only, and might be flagged to only appear once in a level. Using this metadata we can set it up so that early levels are shorter, simpler, and contain fewer ‘puzzle’ prefabs (what we call the more complex prefabs that have optional mazes, gates or enemy ambushes in them). If a new player starts on the first level of a run (which is always in the grassy Land), the prefabs that get chosen to assemble the level are different to, say, the 15th level for a player who’s unlocked lots of upgrades and is currently in the Swamp land. So, to create a single Land means designing the aesthetics, the enemies that occupy its levels, the basic gameplay style, and then, finally, a good hundred or more prefabs that make it up. Doing those first bits isn’t easy, but it isn’t as time consuming as the weeks and months spent making up all the prefabs. This process usually has three steps. First step: drinking coffee. Second step: coming up with basic shapes and paths. This I tend to do in batches, doodling in a notepad or on my tablet, sometimes at a cafe, on a train, or really anywhere that isn’t my work desk (for a change). With enough of these basic shapes figured out in varying levels of detail, it’s then time for- Third step: spend days in Tiled, creating first at first the basic layouts, then adding more aesthetic detail. I usually alternate between doing all three of these critical steps - a few hours in Tiled, then going for a walk to clear my head, get a coffee, and come up with some more prefab ideas. It’s this design process that to me really drives home how much the game is a Roguelike (or is at least related to them - ask two fans of roguelikes what makes something a roguelike and you will get five different answers). Just like designing most any other Rogue-adjacent game, it also means that staring at prefabs and their metadata until your eyes go square won’t truly tell if what you’ve built plays well. Great ideas on paper don’t always work. Or maybe they do, but with a few powerups they become too easy (or too hard). In Tiled, shown above, we have data layers that exist along with aesthetic ones. Different data types (each a unique colour for easy recognition) can be painted on that layer to allow the prefab designer to, for instance, stop a player jumping onto that square, stop power-ups from randomly spawning there, or forcing a square to be non-passible. Which means built into this prefab design cycle is also a crap-ton of testing. From almost the very start we’ve had regular QA and play-testing done at least a few hours a week. What puzzles are too hard when you’re moving at speed? What other forms end up being fun and should be put into more prefabs? Even the simple act of adding more prefabs can unbalance the game if we aren’t careful. Add 20 more prefabs to a given Land, and suddenly those rare ones you made might occur less frequently than you’d like. In the end, it’s meant that designing this game has been a massively cyclic process. Adding features, prefabs, or puzzles, tinkering with them, experimenting, and even removing some if they turn out to have been better left on that scrap of napkin at the cafe down the road from my place.

0 views