Posts in Design (20 found)
Raph Koster 4 days ago

Game design is simple, actually

So, let’s just walk through the whole thing, end to end. Here’s a twelve-step program for understanding game design. There are a lot of things people call “fun.” But most of them are not useful for getting better at making games, which is usually why people read articles like this . The fun of a bit of confetti exploding in front of you, and the fun of excruciating pain and risk to life and limb as you free climb a cliff are just not usefully paired together. In Theory of Fun I basically asserted that the useful bit for game designers was “mastery of problems.” That means that free climbing a cliff is in bounds even though it is terrifying and painful. Which given what we already said, means that you may or may not find the activity fun at the time! Fun often shows up after an activity. There’s neuropsych and lots more to go with that, and you can go read up on it if you want . Anything that is not about a form of problem-solving is not going to be core to game systems design . That doesn’t mean it’s not useful to game experience design, or not useful in general. Also, in case it isn’t obvious – you can make interactive entertainment that is not meant to be about fun . You can also just find stuff in the world and turn it into a game! You can also look at a game and choose not to treat it as one , and then it might turn into real work (this is often called “training”). This rules out the bit of confetti . A game being made of just throwing confetti around with nothing else palls pretty quick. Bottom line: fun is basically about making progress on prediction. There are a lot of types of problems in the world . It is really important to understand that you have to think about problems games can pose as broadly as possible. A problem is anything you have to work to wrap your head around. A good movie poses problems too, that’s why you end up thinking about it long after. You can go look at theorists as diverse as Nicole Lazzaro, Roger Caillois, or Mark LeBlanc for types of fun. You’ll find they’re mostly types of problems , not types of fun. “I enjoy the types of problems that come from chance” or “I enjoy the types of problems that come from interacting with others” or whatever. This is not a bad thing. This is what makes these lists useful. Your game mechanics are about posing problems, so knowing there’s clumps of problem types is very useful. In the end, though, a problem is built out of a set of constraints. We call those rules, usually . It also, though, has a goal. Usually, if we come across a set of rules with no problem, we just play with it, and call it a toy. Building toys is hard! Arriving at those rules and constraints to define a nice chewy problem is very challenging. You can think of a toy as a problematic object, a problem that invites you to play with it. On the other hand, it’s not hard to turn a toy into a game, and people do it all the time. All you have to do is invent a goal. We shouldn’t forget that players do so routinely. Building a toy is an excellent place to start designing a game. Bottom line: we play with systems that have constraints and movement, and we stick goals on them to test ourselves. Games are machines built around uncertainty . Almost all games end by turning an uncertain outcome into a certain one. There’s a problem facing you, and you don’t know if you can overcome it to reach that goal. Overcoming it is going to be about predicting the future. If there’s one thing that good games and good stories have in common, it’s about being unpredictable as long as possible . (This is also where dopamine comes in, it’s tied to prediction; but it’s complicated and nuanced). If a problem basically has one answer, we often call it a puzzle. There’s not a lot of uncertainty built into a binary structure. You can stack a bunch of puzzles one on top of the other and build a game out of them (which then introduces uncertainty into the whole), but a singular puzzle isn’t likely to be called that by most people. It happens quite often that we used to think something was a game, and it turned out it was actually a puzzle. Mathematicians call that “solving the game.” They did it to Connect Four – and you did it to tic-tac-toe, when you were little. Good problems for games therefore all have the same characteristics : A lot of very good problems seem stupidly simple, but have depths to them . Math ones, like “what’s the best path to cross this yard?” but also story ones like “For sale: baby shoes, never worn.” I recently watched a video that included the statement that “picking up sticks” is not a useful loop. Picture a screen with a single stick in the middle. The problem posed is to move the cursor over it and click it. Once you do it, you get to do it again. Guess what? The original Mac shipped with games that taught you how to move a mouse and click things. Once upon a time, mousing was a skill that was challenging; for all I know, you have grandparents who still have trouble with it. For them, it has uncertainty. For you, probably, it doesn’t. Bottom line: the more uncertainty, indeterminacy, ambiguity in your game, the more depth it will have. Now, imagine that the stick pops to a random location each time. Better, yes? The core of a loop is a problem you encounter over and over again. “How do I get the next one?” But something needs to be pushing back , that’s what makes it an interesting problem and is usually what takes it past being a puzzle. I like to say “in every game, there is an opponent.” Even it’s just physics. People talk about the core loop of a game. But there’s really two types of loops. One is what we might think of as the operational loop . This is the loop between you and the problem, it is how you interact with it. You look at it. You form a hypothesis. You poke the problem. You see a result. Maybe it was success, and you grabbed the stick. Maybe it was failure. Maybe it was partial success. You update your hypothesis so you can decide what to do next. The second loop is really your progression loop but is better thought of as a spiral . It’s what people usually mean when they say “a game loop.” They mean picking up the stick over and over. I say it’s a spiral, because clicking on the same stick in the middle of the screen over and over is not usually how we design games. That would actually be repeatedly doing the same puzzle. Instead, we move the stick on the screen each time, and maybe give you a time limit. Now there’s something you’re pushing against, and there’s a skill to exercise and patterns to try to recognize. Far more people will find this a diverting problem for a while. It’s a better game. It’ll get even better if there are reasons why the stick appears in one place versus another, and the player can figure them out over time. This matters: the verbs are in a loop. “Pick up,” over and over. But the situation isn’t. And you are learning how to reduce uncertainty of the outcome: move the mouse here and click, next move it there . That’s why it is a spiral: it is spiraling to a conclusion. It’ll be fun until it’s predictable. You can think of the operational loop as how you turn the wheel, and the situations as the road you roll over. A spot on the wheel makes a progression spiral as you move. One machine, many situations — we call these rules mechanics for a reason. Bottom line: players need to understand how to use the machine, and the point is to gradually infer how it works by testing it against varied situations. You can’t learn and get better unless you get a whole host of information . There are fancy names for each of these, and you can go learn them all . Everything from “affordance” and “juice,” to terms like “state space” and “perfect information” and very confusing contradictory uses of the words “positive” and “negative” paired with the word “feedback.” Feedback in general can, and should be, delightful. That means it’s where you get to use all those forms of fun that I threw away at the beginning. It can be surprising. It can be a juicy multimedia extravaganza. It can be a deeply affecting tragic cutscene that advances the game story. If you have too little feedback, players cannot go around the interaction loop. Picture Tetris if the piece you drop is invisible until it lands. If you have bad feedback, players cannot go around the learning loop either. Picture Tetris if sometimes your score goes down when you complete a line and sometimes it goes up. You can’t draw any conclusions about what the problem in the way of the goal actually is , in that crappy version of Tetris . Feedback needs to act as a reward to help you draw conclusions. But there’s a third mistake: you can supply a gorgeous and compelling set of feedback and not actually have a real problem under there. At minimum you’re making shallow entertainment. At worst, you are building exploitative entertainment. People will be willing to go along with pretty simple and pretty familiar problems as long as the feedback is great. Bottom line: show what you can do, that you did it, what difference it made, and whether it helped. If you are trying to design and are thinking of a specific problem scenario you are not doing game systems design. You are doing level design. “How to multiply numbers” is a problem. “What is 6 x 9” is not a problem, it’s content . Now consider the game of Snake , or Pac-Man . They are also games where the core loop is picking up a stick. The difference is that something is an obstacle to you picking up the stick: you get longer when you pick up the stick, and can crash into yourself. You have to avoid ghosts as you gather the stick. How long you are in Snake is a different situation . Where the apple to eat is located is a different situation. To be specific, you have the same problem in different topology. Where you are relative to the ghosts, and which dots are left, and what directions you can go in the maze are different situations in Pac-Man . You want the verbs you use in the loop to end up confronting many many situations. If your verb can’t, your core loop is probably bad. Your core problem (aka your core game mechanic) is probably shallow. What you want is to be able to throw increasingly complex situations at the player. That’s how they climb the learning ladder . Ideally, they should arrive at interim solutions (lots of words for that, too: heuristics, strategies) that later stop working . Pac-Man actually got solved, by the way! That’s why Ms. Pac-Man was invented. Sometimes, the way to escalate is to change the rules, and that’s what Ms. Pac-Man did. It did it by adding randomness, and in fact using randomness is one of the biggest (and oldest) ways to create situation variation in games. Bottom line: escalate the situations so that theories can be tested, refined, and abandoned. Since we can put all this this down very much to problem solving and learning and mastery, it means we can steal a whole bunch of knowledge from other fields. People learn best when they can experiment iteratively, which we also call “practicing.” That’s why loops make sense. There’s a lot of science out there about how to train, how to practice (and also a lot of educational theory that overlaps hugely), and your game will be better if it follows some of those guidelines. People learn best when the problem they are tackling is right past the edge of what they can do . If it’s too far past that edge, they may not even be able to perceive the problem in the first place! And if the reverse is true and they see a solution instantly, they’ll either be bored, or they might just do that over and over again and never develop any new strategies and not progress . There’s an optimal pacing shape. It looks just like what you see in your literature textbooks when they diagram tension, or whatever: sort of like a rising sine wave. You start slow, then speed up, hit a peak challenge, then back off a bit, give a breather that falls back but not all the way, then speed up… we have conventions for what to put at those peaks (bosses!). But what matters is the shape of the curve. You need to structure your game so that you push players up. They might need to climb the curve at different paces, which is why you might also have difficulty sliders. They might not be capable of getting all the way to the top, and that’s okay. You also need to pace to allow room for everything that isn’t mastering the problem — such as having fun with friends socially . But at the same time, things to do in the game need to come along at the right pace too! Bottom line: Vary intensity and pressure, give players a chance to practice and moments to be tested . Remember the game about clicking on a stick that appeared at a random location on screen? That’s also a rail shooter. You move the mouse and click on a spot in 2d space. Which is also not that different from an FPS — only now you move the camera, not the cursor. Almost no games are made of only one loop. Instead, we chain loops together – complete loop A, and it probably outputs something that may serve as a tool or constraint on a different loop. An FPS has the problem of moving the camera (instead of the mouse) to click on the stick. It also has a loop around moving around in 3d space. Moving around is actually made of several loops, probably, because it may be made of running and jumping and spatial orientation. Those are all problem types! We speak sometimes of value chains : that’s where one loop outputs something to the next loop. We speak also of game economies , which is what happens when loops connect in non-linear ways, more like a web. This is not the sort of economy where you are simulating money or commerce. Instead it’s a metaphor for stocks and flows and other aspects of actual system dynamics science. In this view, your hit points is a “stock” or, if you like, a “currency” you spend in a fight. Games nest fractally, they web into complex economies, and they unroll chains of linked loops. That’s why they can be diagrammed in a multitude of ways. At heart though, you can decompose them all into those elemental small problems, each with an interaction loop and a learning loop centered on that problem. Bottom line: build small problems into larger webs, and map them so you understand how they connect. The common question is “okay, so how do I design a problem like that?” And that is indeed the unique bit in games, because the other items here are common to lots of other fields. The list of possible problems is, as mentioned, enormous. This is a big rabbit hole. And once you consider that you can stack, web, and otherwise interlink problems, it means that there’s a giant composable universe of games (and game variants ) to create. Just bear in mind that because of varied tastes and experience, the diversity of the set of problems you pose is going to affect who wants to play your game. There are basically a set of categories of problems that we know work, and this is the absolute simplest version of them: These break down into a ton of sub-problems, but there are less than you think, and you can actually find lists of them . The hard part is that often they each seem so small and trivial that we don’t think of them as actually being worth looking at! They are also often in disguise: the problem behind where a tossed ball will land, and the problem of how much fuel you have left in your car if you keep driving at this speed, and the problem of when your hit points will run out given you have a poison status effect on you are the same thing . But the more of them you as a designer have wrapped your head around, the more you can combine. And you’ll find them very plastic and malleable. In fact, you could almost make a YouTube video about each one . So where do you get them? Steal them. Other games, sure, but also, the world is full of systems that pose tough problems. You can grab them and reskin them. Bottom line: not every mechanic has been invented, but a ton have. Build your catalog and workbench. In the end, the feedback layer of a game is everything about how you present it. The setting, the lore, the audio, the story, the art… How you dress up the problems can change everything about how the player learns from it, and how they perceive the problem. The exact same underlying problem can be as different as picking up sticks or shooting someone in the face, or as mentioned, the calculus problem of estimating the trajectory of a variable in a system of rates of change (the ball, the car and its gas, the hit points and poison) might be the same but dressed extraordinarily differently . When you think about how you dress up the problems, you are in the realm of metaphor . You are engaging in painting, poetry, and music composition, and rhetoric, and the bardic tradition, and all that other humanities stuff. This is a giant and deep universe for you as a designer to dive into. A lot of this stuff gets called “game design,” but then again, we also often say that a given game designer is a frustrated moviemaker, too. It is really easy to create an experience that clashes with the underlying problems it is teaching. There are fancy critical terms for this. You also need to be very conscious about whether you are building your game so that you are telling the player a story, or so that the player can tell stories with your game . So the takeaway should be: this stuff is deeply, deeply synergistic with the “game system” stuff that this article is about, but they are not the same thing. And games is not the best place to learn how to do these things. Those other fields have much longer traditions and loads of expertise and lessons. They won’t all apply to the issue of “how do I best dress up this collection of problems” but most of them will. It does not frickin’ matter if you start out wanting to make interesting problems, or if you start out wanting to provide a cool experience . You are going to need to do both to make the game really good . Bottom line: game development is a compound art form. You can go learn those individual arts and the part unique to games. Researchers have done a ton of studying “why people play games.” This gets called “motivations.” Motivations are basically about people’s personal taste for groups of problems and how those problems are presented, and characteristics of those problems and the situations in which you find them. Some people like problems where you destroy stuff. Others like problems where you bond with others. Some have trouble trusting other people. Others want to cooperate. Not everyone likes the same sorts of problems or the same sorts of dressings. Some of this is down to personality types, some of it is down to social dynamics, how they were raised, what their local culture is like, what trauma they have had, and countless other psychological things. That’s why one fancy term for this is psychographics . The big thing is, it’s not enough that the problems need to not be obvious to you, and also not be baffling to you. They also have to be interesting to you. What problems fit in that range is going to depend entirely on who you are, what your life experiences have been, what skills you have, and even what mood you are in. Picking motivations and selecting problems based on them is a great way to design. But motivations are not the same thing as fun. They’re a filter, useful in marketing exercises and in building your game pillars (which is an exercise in focus and scope). Scientists have spent a bunch of time surveying tons of people and have arrived at all sorts of conclusions that map people onto reasons to play and from there onto particular problems. If you start with motivations, then you can go from there to types of problems, types of experience, and even player demographics. And then, if you want problems that are about interacting with people, well, there’s lists of those. If you want problems that are about managing resources, or solving math issues, there’s lists of those too. Bottom line: no game is for everyone, so you will make better games if you know who you are posing problems for. I run into game developers who do not understand the above eleven steps all the time . And understanding all eleven is more valuable than building expertise in just one, because they depend on one another. This is because getting any one of the eleven wrong can break your game. The real issue is that each of these eleven things is often multiple fields of study. And yeah, you do need to become expert in at least one. To pick one example, some of us have been working out the rule set for how you can link loops into a larger network of problems for literally over twenty years. Others have spent their entire career doing nothing but figuring out how best to provide just the affordances part of feedback . So game design is pretty simple. But the devil is in details that are not very far below the surface. It’s fairly easy to explain why something is fun for an given audience. It is much harder to build something new that is fun for an arbitrary person. That said, every single one of those fields has best practices, and they are mostly already written down. It’s just a lot to learn. Put another way — every single paragraph in this essay could be a book. Actually, probably already is several. Bottom line: each of these topics is deep, but you want a smattering of all of them. Some of you may not like this deconstructive view on how games are designed. That’s okay. Personally, I find it best to poke and prod at a problem, like “how do I get better at making games?” and treat it as a game. And that’s what I have done my whole career. The above is just my strategy guide. Someone else will have different strategies, I guarantee it. But I also guarantee that if you get better at the above twelve things, you will get better at making games. This is a pragmatic list. And it will be helpful for making narrative games, puzzle games, boardgames, action games, RPGs, whatever. I breezed through it, but there are very specific tools you can pick up underneath each of these twelve things. It really is that simple, but also that hard, because that’s a frickin’ long list if you want to actually dive into each of the twelve. What that also means is that people designing games fail a lot at it . You might say, “can’t they just do the part they know how to do, and therefore predictably make good games?” No, because players learn along with the designers. If you just make the same game, the one you know how to make, the players get bored because it’s nothing but problems they have seen before and already have their answers to. Sometimes, they get so bored that an entire genre dies. And if you instead make it super-complicated by adding more problems, it might dissolve into noise for most people. Then nobody plays it. And then the genre dies too! Game designers will routinely fail at making something fun. When the game of making games is played right, it is always right outside the edge of what the designers know how to do. That’s where the fun lives, not just for the designer, but also for their audience. That’s it, the whole cheat sheet. That’s it. Hope it helps. They need to have answers that evolve as you dig in more – so they need to have depth to them. Your first answer should only work for a while. There might be many paths to the solution, too. This is why so many games have a score – it helps indicate how big a spread of solutions there are! They need to have uncertain answers. (When you’re little, this universe is a lot larger than it is when you’re older – peek-a-boo is uncertain up to a certain point!). The problem should be something that can show up in a lot of situations. You need to know what actions – we usually call them verbs — are even available to you. There’s a gas pedal. You need to be able to tell you used a verb. You hear the engine growl as you press the pedal. You need to see that the use of the verb affected the state of the problem, and how it changed. The spedometer moved! You need to be told if the state of the problem is better for your goal, or worse. Did you mean to go this fast? Mathematically complex puzzles Figuring out how other humans think Mastering your body and brain

0 views
Hugo 5 days ago

Can You Still Learn to Draw in the Age of AI?

I started drawing as a teenager because I loved comics and several people around me worked or had worked in bookstores. I copied everything I could—comic book characters, European BDs. I got good at copying, but without mentors, I eventually plateaued. Then studies took over, professional life began, and I stopped drawing. Here are some of the last drawings made in 1999 : ::Gallery --- photos: - src: "https://writizzy.b-cdn.net/blogs/48b77143-02ee-4316-9d68-0e6e4857c5ce/1762035986119-latlktl.jpg" alt: "Magneto" - src: "https://writizzy.b-cdn.net/blogs/48b77143-02ee-4316-9d68-0e6e4857c5ce/1762035990247-zmqo757.jpg" alt: "Xmen" - src: "https://writizzy.b-cdn.net/blogs/48b77143-02ee-4316-9d68-0e6e4857c5ce/1762035995600-0vi7vkk.jpg" alt: "Witchblade" --- :: ## The golden age of Youtube But in 2018, I thought we were living in amazing times. There were now tons of online resources to learn from. I found hundreds of talented artists on YouTube who reignited my desire to learn. I finally had everything at my fingertips to understand the basics I'd missed when I was younger: the Loomis method, proportions, perspective, inking techniques... So [I started again](https://www.instagram.com/corwinhakanai/). I drew traditionally with pencil, then ink, tried watercolor, and finally digital drawing. I felt steady progress, even though drawing is one of those skills where learning happens in plateaus. There are tough moments where you stagnate, and then something clicks and you leap forward again. ![Moon knight I drew for Inktober 2021](https://writizzy.b-cdn.net/blogs/48b77143-02ee-4316-9d68-0e6e4857c5ce/1762036626305-0pqp4c5.jpg)It was better, but I still I felt limited, especially since I wanted to write stories and tell them through drawings. The gap between being able to reproduce a drawing correctly and bringing a story to life is massive. But that's part of the game. Drawing is learned slowly, in stages. I'd learned a lot, but now I needed to tackle composition rules, master lighting, understand how to structure a story, how to chain shots to guide the reader's eye to the right place, lettering, and many other things. ## And then AI arrived. DALL-E was born in 2021. Midjourney followed in 2022. Today in 2025, these AIs are incredible at creating drawings that I still can't produce after several years of training. A professional will always be better, but only after many, many years of experience. A beginner like me is quickly discouraged by the gap between my current knowledge and the minimum level needed to at least match an AI. That’s what I call **“the AI wall”**. Digital tools got me back into drawing in 2018, but AI cooled my enthusiasm a few years later. I haven't drawn in a year. My last drawing post [on Instagram](https://www.instagram.com/corwinhakanai/) was at the end of 2023. And I'm conflicted. I see people who, on the contrary, found new motivation in it. They couldn't draw but are now able to tell a story in comic form. Overall, I could do that because the story I have in mind could use this medium. You could say it's the story that matters more than the drawing. There are plenty of counter-examples, but let's assume it's true for the sake of argument. Except I don't want to learn how to prompt an AI. It's less exciting than learning to master your line work and thinking about character design or composition. ## What about software development ? And in those moments, I draw a parallel with my job as a developer. I've reached a point where, like the professional artists I admire, AI doesn't scare me too much. I know how to use it as a tool and I'm still capable of doing what it produces. I can go faster with it, but also because I master the equivalent of the basic rules of drawing for my profession. I understand architecture, UX, security, etc. I am above the AI wall and I'm looking down from above. But what about young people entering the tech industry today who face the same AI wall I have to climb as an artist? Who's going to take the time to learn the basics? I was born in the last century. The year 2000 made me dream. There was a kind of technological mythology where we'd end up delegating all the tedious tasks to machines so we could focus on what interests us most: discussion, games, arts, creativity. And I admit I feel like we got a bit lost along the way and did the opposite. I hope I'm wrong. On the other hand, will they be just as important in the future? In the past, driving meant adjusting the dynamo, setting the choke to enrich the air-fuel mixture, cranking a handle to start the engine. I imagine you needed to know much more about mechanics than you do today. But that doesn't stop me from driving today. Cars have evolved. Computing tools are evolving too. Once AI masters all the basic aspects, won't the issue simply be knowing how to properly dialogue with an AI? In the same way that some new comic book authors can produce by prompting an AI. In fact, their job has changed compared to their equivalents from 20 years ago. And it's quite likely that this will be the case for software development in the future.

0 views
Manuel Moreale 1 weeks ago

Frank Chimero

This week on the People and Blogs series we have an interview with Frank Chimero, whose blog can be found at frankchimero.com . Tired of RSS? Read this in your browser or sign up for the newsletter . The People and Blogs series is supported by Sal and the other 123 members of my "One a Month" club. If you enjoy P&B, consider becoming one for as little as 1 dollar a month. I’m Frank Chimero, I design and write from my little apartment in New York City. I’ve been doing this for a long time, mostly for technology and media companies. Other than work, I’m interested in the same things many other people are: my partner, my dog, visiting museums, movies, paintings, reading, cooking, stimulating conversation, and long walks. A lot of those have a tendency to go together, especially here in New York, which is nice. I started teaching design shortly after finishing undergrad and had a great time with it. My students and I had so many stimulating conversations in the classroom, and their questions really forced me to think about my presumptions and beliefs about design in a way I wouldn't have without the prompting. So, after class, I'd type them up and was eager to share, and thus my blog was born. Writing is generally a way to scratch an itch in my brain. Sometimes it is an annoyance or disagreement with something else I read, or responding to an idea I came across in my reading that captivated me in some way, and trying to figure out why it grabbed me. Most first drafts are brain dumps in front of the keyboard or going for a walk and using speech to text on my phone. These things are incredibly rough, and take a bit of polishing until they end up on the site, but I enjoy that process too. It’s nice to nudge, tweak, and expand on parts and feel things get stronger or more clear. I try to have some interesting reference or idea at the heart of each post I make, because it’s what I want to read. The web I am interested in is the insights and ideas of individuals. Some people will think I’m a barbarian, but I don’t think tools matter that much. I write in TextEdit. If it’s by hand, it is typically on loose copier paper and a pen I stole from a hotel. I’m sensitive to spaces and love a beautiful room and good lighting, but I think it is more worthwhile to learn how to write well in spite of the environment rather than because of it. At least, that’s what I tell myself. The trick, for me, is to seek out those beautiful places and experiences and try to hold on to the internal environment they create in me, then find ways to get it down onto the page later. Sometimes that works, sometimes it doesn’t. A few years ago I wrote a book called The Shape of Design . I’d book trains from New York City up to Albany to enjoy the views of the Hudson Valley from the train window. The trip was about 8 hours there and back home. I got so many words down, something about the momentum of the view creating a velocity in the writing. But you know what? Once I stacked that writing up next to all the other writing I did in libraries, at the kitchen table, or coffee shops, I never could pinpoint where what was written. This is going to be underwhelming. I have an off-the-rack Macbook Pro M4. There is pretty much nothing installed on it except Figma, my fonts, and just enough of a local dev environment to make my rickety Jekyll deployments. If you were to close your eyes and imagine the first five sites you’d need for work, I have those, too. I have last year’s iPhone with YouTube and NTS Radio on it. I’ve stripped most everything out. It makes no difference. I just type and typeset. I’m not certain. I have no clue how one would grow an audience in 2025 without betraying some of my values about respecting people’s attention. My current mindset is to enjoy my audience, respect them, and make no presumptions about it growing. The site either costs $60 or $0, depending on how you look at it. It’s served via Github Pages, which requires a subscription, but it also pays for other things like private repos, etc. I’ve never tried to make money with the writing on my site. Even the book I wrote is available in full online for free. This isn’t necessarily a moral stance, it is simply that the economics of it wouldn’t pay enough to justify the headspace it’d occupy. If others want to do something different, I say go for it. I focus most of my reading time on books, and most of my digital reading is happening through newsletters these days. On the blog side of things, I mostly check up on friends’ writing by manually going to their site. “I wonder what Naz is up to?” and that kind of thing. I know there is RSS, but seeing the site is half the point. You’ve already interviewed a lot of them, but I think you would get a kick going through Rob Weychert ’s obsessively maximalist life-documentation-as-blog. It is exactly the opposite of my own tendencies (“anything you don’t remember must not be that important”), and I have a lot of admiration, confusion, and respect for what he’s done. I want to take a moment to give a shout out to libraries. Librarians are god’s people. I think there is a strong ideological kinship between digital personal publishing (blogs) and libraries (self-expression, availability of information, capitalistic counterpoint, community and connection, and the overall “this is for everyone” vibe the web was born from). So, go check out your local library. Get a card, check out a book, enjoy the space, and maybe ask about what other services they have to offer besides media. Good communities come from good people and good spaces. Supporting your local library may be a way to nudge the world toward your vision of how it should be. Or it could just be a nice way to spend an afternoon. 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 113 interviews . Make sure to also say thank you to Henrik Wist and the other 123 supporters for making this series possible.

0 views
Raph Koster 1 weeks ago

Stars Reach visual upgrades

For months now, we have been working on a big overhaul to the visuals in Stars Reach . This has involved redoing most of the shaders in the entire game, and going back and retouching every asset. We started by redoing all the plant life and flora, and we have hundreds of those assets that had to be redone. Further, they all need to grow, change in response to seasons, be able to catch fire and burn, freeze, shed leaves and die, and so on. We don’t pre-design our biomes; we derive them on the fly from the simulation based on the environmental conditions. The right plants grow in the right places based on the temperature and the humidity and the soil types. (Yes, we even have a dozen soil types). All that means that every tree you see in the game grew there , and propagates across the landscape just like real plants. Seeds fall and grow into trees, forest fires happen and so on. Further, everything in the landscape itself can be changed. Mountains can be flattened, roads built, and so on. What you see in this screenshot and the videos is all dynamic, evolving, and modifiable by players. In this picture, that cliff face can not just be climbed, it can be melted into lava. You can see an ice rim along the top — pour water on the ground there, and it freezes and you will skate on the resulting ice. We are finally at a place where we do not need to compromise on the visual quality in order to deliver the simulated living world we have had working for years now. We also have been working on improved lighting, volumetric fog and other effects. And there is more coming, such as a much improved global illumination model. Truly dark caves are on the way! Some of these things are in the game now — we’ve been slowly putting in the new assets for months — but a lot of it is still pending a big patch to the game to roll out the technical features. But we’re at the point in development where it made sense to share some of the new visuals as a teaser. Environments are well along, and we are tackling all the hard surface objects next. Then, we will redo characters and creatures too. It should all add up to a pretty significant change in the game’s style, though we are sticking to a somewhat stylized realism look since the games market is currently chock full of photorealistic games that are indistinguishable from one another. All of this is also coming with pretty significant optimizations as well, resulting in smoother framerates and general performance. Plenty more to do! I thought you might be amused to see just how far we have come, so here’s a selection of images from way back when to now. When we first announced and got pushback on the graphics, we said we would keep working on it. Well, iteration takes time. But I think it’s really cool to see the incremental steps forward over time. I know plenty of folks are probably wondering, “okay, but what about gameplay?” This update is about visuals, but there’s been quite a lot of game stuff rolled out since I last posted! Banks, player run shops, combat updates, and more. Multiple player cities have been built and destroyed this year so far, and we have even blown up a few entire planets. And coming real soon: player governments. If you want to check out the state of gameplay, there are tons of videos up on the Stars Reach Youtube channel.

0 views
The Jolly Teapot 1 weeks ago

October 2025 blend of links

Some links don’t call for a full blog post, but sometimes I still want to share some of the good stuff I encounter on the web. Why it is so hard to tax the super-rich ・Very interesting and informative video, to the point that I wish it were a full series. Who knew I would one day be so fascinated by the topic of… checks notes … economics? jsfree.org ・Yes, a thousand yes to this collection of sites that work without needing any JavaScript. I don’t know if it’s the season or what, but these days I’m blocking JS every chance that I get. I even use DuckDuckGo again as a search engine because other search engines often require JavaScript to work. Elon Musk’s Grokipedia contains copied Wikipedia pages ・Just to be safe, I’ve immediately added a redirection on StopTheMadness so that the grokipedia domain is replaced by wikipedia.com (even if Wikipedia has its problems, especially in French). Also, what’s up with this shitty name? Why not Grokpedia ? I would still not care, but at least it wouldn’t sound as silly. POP Phone ・I don’t know for whom yet, but I will definitely put one of these under the Christmas tree this winter. (Via Kottke ) PolyCapture ・The app nerd in me is looking at these screenshots like a kid looks at a miniature train. (Via Daring Fireball ) Bari Weiss And The Tyranny Of False Balance ・“ You don’t need to close newspapers when you can convince editors that ‘balance’ means giving equal weight to demonstrable lies and documented facts. ” light-dark() ・Neat and elegant new CSS element that made me bring back the dark mode on this site, just to have an excuse to use it in the CSS. Eunoia: Words that Don't Translate ・Another link to add to your bookmark folder named “conversation starters.” (Via Dense Discovery ) Why Taste Matters More ・“ Taste gives you vision. It’s the lens through which you decide what matters, and just as importantly, what doesn’t. Without taste, design drifts into decoration or efficiency for efficiency’s sake. Devoid of feeling .” Tiga – Bugatti ・I recently realised that this truly fantastic song is already more than 10 years old, and I still can’t wrap my head around this fact. The video, just like the song, hasn’t aged one bit; I had forgotten how creative and fun it is. More “Blend of links” posts here Blend of links archive

0 views
Dayvster 1 weeks ago

AI’s Trap: Settling for Boilerplate Over Elegant Code

We are all familiar with Picasso's "The Bull" series, in which he progressively simplifies the image of a bull down to its most basic, yet still recognizable form. Steve Jobs was famously inspired by this concept, leading him to advocate for simplicity and elegance in design and technology above countless features and excessive complexity. Distill a concept even as complex as software or UX down to its essence, and what you are left with is something beautiful and elegant that fulfills its purpose with minimal fuss. ## So Why Do We Accept Ugly Code Then? I've noticed a worrying trend in programming that, as tools around a programming language improve and automate more of our work, we increase our tolerance for boilerplate, repetitive, and frankly, ugly code. We accept it and we tell ourselves it's ok, the linter will fix it, the formatter will fix it, the compiler will optimize it, in the end it's all ones and zeroes anyway, right, why would any of this matter? Since AI has entered the equation, tolerance for boilerplate and excuses for ugly code has only increased. We tell ourselves that as long as the AI can generate the code for us, it doesn't matter if it's elegant or not. After all, we didn't write it, the AI did. So why should we care about the quality of the code? After all, we relinquished ownership of the code the moment we asked the AI to generate it for us. Now, you may not be someone who uses AI to generate code, and kudos to you, welcome to the club, however, even as someone who relatively early noticed that AI does not produce something that I could sign off on as my own work proudly and with confidence. I have engaged in the practice of using AI to generate some more tedious tasks for myself, such as just taking a JSON response from an API and asking Copilot, ChatGPT, or Grok to generate a type definition in the language I am currently working with. I work on many personal and professional projects, and I encounter different types of people and teams, some embrace AI, others shun it. However I have noticed that in teams or projects where AI is embraced or even encouraged or mandated as part of the development process, tend to produce a lot of boilerplate and a lot of very ugly inelegant code that few wish to take real ownership of, because it is not their creation they handed ownership of it to the AI and therefore abandoned the developer - code relationship that is so essential to producing quality software. ## Developers Should Love Their Code I harp on this a lot, development is a unique one of a kind blend of engineering and creative expression, those two aspects of our craft should not be at odds with each other, but should rather complement each other. When you write code, you should love it, you should be proud of it, you should want to show it off to others who can understand it and appreciate it, in essence, your way of expressing your way of thinking and how you tackle problems. I've briefly touched upon the fact that handing off ownership of your code to AI means abandoning that relationship between you, the developer, and your code. I want to expand on that a bit more. If you don't care about the code you write, if you don't love what you are doing or the creative process to solve a specific problem, you will forever lack understanding of that specific problem that you are solving. It will get solved for you by the AI, and you will rob yourself of the opportunity to learn and understand that problem on a deeper level. This is something that has kicked me in the ass a fair few times in the past, I'd get a problem to solve, think oh this is easy, draft up an initial solution solve the problem at a very superficial level and then in the coming weeks get 10 QA tickets filed against that problem because there is more to the problem than meets the eye and there are often things that you miss or do not even consider during your first implementation. AI will do exactly the same thing every single time. The difference, though, is that every time I was given a problem to solve, it resulted in fewer and fewer QA tickets because I understood and learnt from my past experiences and mistakes and knew how to approach problem-solving more effectively. AI will not do any of that, it will always solve the problem given to it at face value without any deeper understanding or context. It will not learn from past mistakes, grow, or adapt its mindset to shift its approach based on new information or insights. It will always solve the problem, and worst of all, it will never learn to understand the problem so well that it can simplify the solution down to its essence and produce something elegant. There is a certain beauty to solving a problem and all of its potential side effects in a very minimal and easily readable way. That is an ideal that I strive for in my own work, and I encourage you to do the same. Love your code, be proud of it, and strive for elegance over boilerplate. ## The Cost of Boilerplate Boilerplate code is not just an eyesore, it comes with real costs. It increases the cognitive load on developers, makes the project less enjoyable to work on, and increases the time to onboard new team members. And increases the time to fix or resolve issues, which directly impacts the experience of the end user of your product. As a third-order effect, it also increases the soft requirement for more tooling and more AI assistance to manage and maintain your codebase, which is a dangerous spiral best avoided altogether. A question I've been asking myself is how much of this is by happenstance and how much of this is by design. I don't want to get all conspiracy theorist on you, but it does make me wonder if there are vested interests in making us accept boilerplate and ugly code as the norm, because it increases the demand for AI tools and services that can help us manage and maintain our codebases. I'm not confident enough to attach any weight to this thought, but it's something worth pondering. ## Aesthetic Responsibility It's very easy for us as developers to simply dismiss aesthetics as something superficial and unimportant in the grand scheme of things. After all, we are not building art, we are building software that solves problems and delivers value to users. However, I would argue that aesthetics play a crucial role in the quality and maintainability of our code. When we write code that is elegant and beautiful, we are not just making it easier for ourselves to read and understand, we are also making it easier for others to read and understand. We are creating a shared language and a shared understanding of the problem we are solving and the solution we are implementing. When we write ugly and boilerplate code, we are creating barriers and obstacles for ourselves and others. We are making it harder to read and understand, we are making it harder to maintain and evolve, and we are making it harder to collaborate and share knowledge. We're increasing the friction instead of reducing it. It always feels nice as a human to look at something beautiful, whether it's a piece of art, a well-designed product, a sports car, a building with stunning architecture, and so on and so forth. But when it comes to code, we often dismiss aesthetics as unimportant, after all, it's a means to an end, right? I would argue that as developers, we have an aesthetic responsibility to ourselves and to others to write code that is elegant and beautiful, not just for the sake of aesthetics, but for the sake of quality and maintainability. But it is very easy lately to just let the tools we have been given and AI do the heavy lifting for us, and in doing so, we risk losing sight of our aesthetic responsibility as developers. ## How Does AI Increase the Tolerance for Boilerplate? You know the drill: you are working away on a piece of a project, and you're on a tight deadline with a backlog full of features to implement and bugs to fix. You think to yourself, "I just need to get this done quickly, I can refactor it later(a mindset I generally encourage)." So you ask the AI to generate the code for you, and it spits out a solution that does not work, so you refine your prompt and try again, and again, and again until you get something that works. Now you have a working solution, great! One quick glance at your `git status`, **HOLY SH.. WHY ARE THERE 32 FILES CHANGED? AND WHY ARE MOST OF THEM NEW FILES?** Ok..OK, you have a working solution. It's best to open up a PR and let the Copilot PR bot handle the code review, and maybe a couple of co-workers will spot some things and suggest improvements. Once you have more time on your hands, you will absolutely go back and refactor this mess down to something elegant and beautiful. You just need to get this next task done first, oh, and it's on a tight deadline as well... Before you know it, you have a codebase full of boilerplate and code that could easily be done in half as many lines or less, you will never go back and refactor it because there is always something more urgent to do, and the cycle continues. Maintenance? Not a problem, we can just use AI to generate documentation for us or explain code blocks for us. Testing? AI can generate tests for us, no need to think about edge cases or test coverage. Performance? AI can optimize our code for us, no need to understand the underlying algorithms or data structures. It creeps up on you slowly, but surely. AI stands as an excuse to not care about the quality of your code, but only the quality or functionality of your outcome. There's a lot to be said and discussed about this topic. You might be rightfully asking yourself, does it even matter if the code is ugly and I feel no pride in it, as long as the end user gets the functionality they need? ## "Good Enough" Is Not Good Enough I always liked the saying, "How you do anything is how you do everything." It has multiple different explanations and interpretations, but to me, it boils down to this: if you accept mediocrity in one aspect of your life, you will accept mediocrity in all aspects of your life. Or, how you do the little things is how you do the big things. If you accept "good enough" code, you will eventually have a good enough product on your hands that might have to compete with products that were built with care and pride. Do you want to deliver good enough products, or do you want to deliver great products that you can be proud of? Completely ignoring the market and financial viability of this approach, will you be happy with the work you do if mediocrity is the standard you hold yourself to? Or worse, if mediocrity is the modus operandi of your team or company? If you truly believe that "good enough" is good enough, then by all means continue down that path. But I urge you to test that belief, challenge it, start a project that you may never finish or get paid for, but attempt to take a complex concept and distill it down to its essence in the most elegant way possible, do what Picasso did with his bull series, and see how far you can push yourself to create something beautiful out of something complex while still maintaining its core functionality and purpose. ## Conclusion AI is a powerful tool that can help us be more productive and efficient, but it should not be used as an excuse to accept boilerplate and ugly code. As developers, we should strive for elegance and simplicity in our code, and we should take pride in the work we do. We should love our code and our craft, and we should never settle for "good enough" when it comes to the quality of our work. **Write code you would sign your name under.** If you've enjoyed this article and made it this far, thank you sincerely for your time. I hope it was worth it and that it sparked some thoughts and reflections on your own approach to coding and craftsmanship, and I sincerely hope it did not feel wasted. If you have any thoughts or feedback on this article, please feel free to reach out to me on [Twitter](https://twitter.com/dayvsterdev). I'm always open to discussions and feedback, or just general chit chat about just about anything I find interesting.

0 views
Manuel Moreale 2 weeks ago

Romina Malta

This week on the People and Blogs series we have an interview with Romina Malta, whose blog can be found at romi.link . Tired of RSS? Read this in your browser or sign up for the newsletter . The People and Blogs series is supported by Piet Terheyden and the other 122 members of my "One a Month" club. If you enjoy P&B, consider becoming one for as little as 1 dollar a month. I’m Romina Malta, a graphic artist and designer from Buenos Aires. Design found me out of necessity: I started with small commissions and learned everything by doing. What began as a practical skill became a way of thinking and a way to connect the things I enjoy: image, sound, and structure. Over time, I developed a practice with a very specific and recognizable imprint, working across music, art, and technology. I take on creative direction and design projects for artists, record labels, and cultural spaces, often focusing on visual identity, books, and printed matter. I also run door.link , a personal platform where I publish mixtapes. It grew naturally from my habit of spending time digging for music… searching, buying, and finding sounds that stay with me. The site became a way to archive that process and to share what I discover. Outside of my profession, I like traveling, writing, and spending long stretches of time alone at home. That’s usually when I can think clearly and start new ideas. The journal began as a way to write freely, to give shape to thoughts that didn’t belong to my design work or to social media. I wanted a slower space where things could stay in progress, where I could think through writing. I learned to read and write unusually early, with a strange speed, in a family that was almost illiterate, which still makes it more striking to me. I didn’t like going to school, but I loved going to the library. I used to borrow poetry books, the Bible, short novels, anything I could find. Every reading was a reason to write, because reading meant getting to know the world through words. That was me then, always somewhere between reading and writing. Over the years that habit never left. A long time ago I wrote on Blogger, then on Tumblr, and later through my previous websites. Each version reflected a different moment in my life, different interests, tones, and ways of sharing. The format kept changing, but the reason stayed the same: I’ve always needed to write things down, to keep a trace of what’s happening inside and around me. For me, every design process involves a writing process. Designing leads me to write, and writing often leads me back to design. The journal became the space where those two practices overlap, where I can translate visual ideas into words and words into form. Sometimes the texts carry emotion; other times they lean toward a kind of necessary dramatism. I like words, alone, together, read backwards. I like letters too; I think of them as visual units. The world inside my mind is a constant conversation, and the journal is where a part of that dialogue finds form. There’s no plan behind it. It grows slowly, almost unnoticed, changing with whatever I’m living or thinking about. Some months I write often, other times I don’t open it for weeks. But it’s always there, a reminder that part of my work happens quietly, and that sometimes the most meaningful things appear when nothing seems to be happening. Writing usually begins with something small, a sentence I hear, a word that stays, or an image I can’t stop thinking about. I write when something insists on being written. There is no plan or schedule; it happens when I have enough silence to listen. I don’t do research, but I read constantly. Reading moves the language inside me. It changes how I think, how I describe, how I look at things. Sometimes reading becomes a direct path to writing, as if one text opened the door to another. I love writing on the computer. The rhythm of typing helps me find the right tempo for my thoughts. I like watching the words appear on the screen, one after another, almost mechanically. It makes me feel that something is taking shape outside of me. When I travel, I often write at night in hotels. The neutral space, the different air, the sound of another city outside the window, all create a certain kind of attention that I can’t find at home. The distance, in some way, sharpens how I think. Sometimes I stop in the middle of a sentence and return to it days later. Other times I finish in one sitting and never touch it again. It depends on how it feels. Writing is less about the result and more about the moment when the thought becomes clear. You know, writing and design are part of the same process. Both are ways of organizing what’s invisible, of trying to give form to something I can barely define. Designing teaches me how to see, and writing teaches me how to listen. Yes, space definitely influences how I work. I notice it every time I travel. Writing in hotels, for example, changes how I think. There’s something about being in a neutral room, surrounded by objects that aren’t mine, that makes me more observant. I pay attention differently. At home I’m more methodical. I like having a desk, a comfortable chair, and a bit of quiet. I usually work at night or very early in the morning, when everything feels suspended. I don’t need much: my laptop, a notebook, paper, pencils around. Light is important to me. I prefer dim light, sometimes just a lamp, enough to see but not enough to distract. Music helps too, especially repetitive sounds that make time stretch. I think physical space shapes how attention flows. Sometimes I need stillness, sometimes I need movement. A familiar room can hold me steady, while an unfamiliar one can open something unexpected. Both are necessary. The site is built on Cargo, which I’ve been using for a few years. I like how direct it feels… It allows me to design by instinct, adjusting elements visually instead of through code. For the first time, I’m writing directly on a page, one text over another, almost like layering words in a notebook. It’s a quiet process. Eventually I might return to using a service that helps readers follow and archive new posts more easily, but for now I enjoy this way. I don’t think I would change much. The formats have changed, the platforms too, but the impulse behind it is the same. Writing online has always been a way to think in public. Maybe I’d make it even simpler. I like when a website feels close to a personal notebook… imperfect, direct, and a bit confusing at times. The older I get, the more I value that kind of simplicity. If anything, I’d try to document more consistently. Over the years I’ve lost entire archives of texts and images because of platform changes or broken links. Now I pay more attention to preserving what I make, both online and offline. Other than that, I’d still keep it small and independent. It costs very little. Just the domain, hosting, and the time it takes to keep it alive. I don’t see it as a cost but as part of the work, like having a studio, or paper, or ink. It’s where things begin before they become something else. I’ve never tried to monetise the blog. It doesn’t feel like the right space for that. romi.link/journal exists outside of that logic; it’s not meant to sell or promote anything. It’s more like an open notebook, a record of thought. That said, I understand why people monetise their blogs. Writing takes time and energy, and it’s fair to want to sustain it. I’ve supported other writers through subscriptions or by buying their publications, and I think that’s the best way to do it, directly, without the noise of algorithms or ads. I’ve been reading Fair Companies for a while now. Not necessarily because I agree with everything, of course, but because it’s refreshing to find other points of view. I like when a site feels personal, when you can sense that someone is genuinely curious. Probably Nicolas Boullosa Hm… No mucho. Lately I’ve been thinking about how fragile the internet feels. Everything moves too quickly, and yet most of what we publish disappears almost instantly. Keeping a personal site today feels like keeping a diary in public: it’s small, quiet, and mostly unseen, but it resists the speed of everything else. I find comfort in that slowness. Now that you're done reading the interview, go check the blog . If you're looking for more content, go read one of the previous 112 interviews . Make sure to also say thank you to Jim Mitchell and the other 122 supporters for making this series possible.

1 views
Chris Coyier 2 weeks ago

Plates

Like, that you eat off. I asked about them the other day: Who’s got a set of dinner plates they really love? Having a fairly direct relationship to an artist would be nice… Otherwise, shopping! IKEA — GLADELIG . $5.99 for a 10″ plate is a good deal and it’s a classy look. (via Nicole ) Corelle — Winter Frost White 18-piece Dinnerware Set The ultimate classic for me. This is what I grew up with. They are thin, light, and strong. And only $79.99 for 6 of each large plate, small plate, and bowl. (via Chris ) Noritake — ColorWave The ColorWave sets are pretty simple and classy looking. $139.99 for 4-of-each. They have showier stuff like a Frank Lloyd Wright set and My Neighbor Totoro set as well which appeal to me. (via Montster ) East Fork — Starter Set This is actually what I had before, and honestly they are really nice. I love those unglazed rims and the spotted look. They are just pricy at $426 for a 4-of-each set. Wanted to try something new. (via Zack ) Crate & Barrel — Mercer $74.95 for 8 plates is a pretty good deal. Create & Barrel was where my mind first goes for something like this and I’m sure it would have been a good choice as well. (via Cassidy ) Fable — Dinner Plates Love the look of these. So plain but with just tiny bits of waves/variations. $104 for 4 (just plates) (via Brian ) Fiestaware — Skeleton Duet This is what I went with! ‘Tis the season, I guess, but I loved the design and I’m gonna rock them all year long. I paired the small orange Skeleton places with these black larger “Dinner Bowls” , a couple of oblong Skeleton serving platters, and got a free Skeleton dish towel. (via Bryan ) Get a local ceramics artist to do them . Love it, do it if you can. It will probably be expensive and take a while. It’s also subject to the style of the artist and likely won’t be simple/plain if that’s what you’re after. Find a ceramics artist on Etsy you like. Good luck, Etsy is so full of garbage these days I find it hard to find anything decent in any category.

0 views
David Bushell 3 weeks ago

Croissant Favicons and Tauri Troubles

Croissant v0.4 is out! I fixed a few minor bugs and added favicons. I’ve had a surprising amount of feedback. I wasn’t expecting anyone to care about an app I designed for myself. Thanks to all who managed to navigate my contact form . Croissant’s design philosophy is vague because I’m just making it up as I go along. Essentially it’s an experiment in keeping it simple. Not “MVP” because MVP is nonsense — and not “minimalism” because that does not mean good. Croissant is just basic and unbloated. The three most requested features have been: Folders is never going to happen, sorry! That would literally double the codebase for a feature I’d never use myself but have to maintain. Bookmarks is possible. Croissant is just a reader not an organisation tool but I see the value of “read later”. Not sure how this will work yet. I do not want to build a bookmark manager. Favicons has happened! When I declared “no icons” I was talking about the craze of UI icons everywhere . Icons without labels! Meaningless béziers from self-important designers that leave the rest of us saying “WTF does this button do?” Favicons actually serve a purpose and improve the design. Favicons are a simple feature but were not easy to implement. Tauri is causing me headaches. I’m starting to rethink if I should continue the native app wrapper or focus solely on the PWA . The web platform always wins. How many cautionary tales must I read before I accept the truth! Why am I wasting time debugging Tauri and Apple’s webview for issues that don’t even exist in Safari? Wasted time and energy. I’m accruing non-transferable knowledge in my (very) limited brain capacity. Croissant v0.4 might be the last native macOS version. It only exists because the PWA requires a server proxy (CORS) that has privacy concerns . Maybe I can add a “bring your own proxy” feature? Podcast feeds include an image tag but basic RSS does not. There are standardised ways to provide an image/icon with and web manifests . These both require parsing the website’s HTML to discover. I’m relying on “known” root locations; namely: These locations aren’t required for either icon but browsers check there by default so it’s a good place to guess. For the 200-ish blogs I subscribe to I get a ~65% success rate. Not ideal but good enough for now. I really want to avoid HTML spelunking but I may have to. Expect an improvement in the next update. For now a croissant emoji is used for missing icons. I’m using the Offscreen Canvas API to generate a standard image size to cache locally. Favicons are currently cached for a week before refreshing. First I tried using a service worker to cache. Tauri was not happy. Second I tried using OPFS with the File System API. Tauri was not happy. I dumped Base64 into local storage and Tauri was OK with that but I wasn’t because that’s horrible. Finally I went back to IndexedDB which is perfectly happy storing binary blobs. So you can see why Tauri is on thin ice! I don’t want tech choices dictating what parts of the web platform I can use without jumping through non-standard hurdles. That’s all for now. I hope to have another update this year! Visit CroissantRSS.com to download or install Croissant as a progressive web app. Oh yeah… and I kinda messed up deployment of the PWA service worker so you may need to backup, remove, and reinstall… sorry! Thanks for reading! Follow me on Mastodon and Bluesky . Subscribe to my Blog and Notes or Combined feeds.

0 views
tonsky.me 3 weeks ago

I am sorry, but everyone is getting syntax highlighting wrong

Translations: Russian Syntax highlighting is a tool. It can help you read code faster. Find things quicker. Orient yourself in a large file. Like any tool, it can be used correctly or incorrectly. Let’s see how to use syntax highlighting to help you work. Most color themes have a unique bright color for literally everything: one for variables, another for language keywords, constants, punctuation, functions, classes, calls, comments, etc. Sometimes it gets so bad one can’t see the base text color: everything is highlighted. What’s the base text color here? The problem with that is, if everything is highlighted, nothing stands out. Your eye adapts and considers it a new norm: everything is bright and shiny, and instead of getting separated, it all blends together. Here’s a quick test. Try to find the function definition here: See what I mean? So yeah, unfortunately, you can’t just highlight everything. You have to make decisions: what is more important, what is less. What should stand out, what shouldn’t. Highlighting everything is like assigning “top priority” to every task in Linear. It only works if most of the tasks have lesser priorities. If everything is highlighted, nothing is highlighted. There are two main use-cases you want your color theme to address: 1 is a direct index lookup: color → type of thing. 2 is a reverse lookup: type of thing → color. Truth is, most people don’t do these lookups at all. They might think they do, but in reality, they don’t. Let me illustrate. Before: Can you see it? I misspelled for and its color switched from red to purple. Here’s another test. Close your eyes (not yet! Finish this sentence first) and try to remember what color your color theme uses for class names? If the answer for both questions is “no”, then your color theme is not functional . It might give you comfort (as in—I feel safe. If it’s highlighted, it’s probably code) but you can’t use it as a tool. It doesn’t help you. What’s the solution? Have an absolute minimum of colors. So little that they all fit in your head at once. For example, my color theme, Alabaster, only uses four: That’s it! And I was able to type it all from memory, too. This minimalism allows me to actually do lookups: if I’m looking for a string, I know it will be green. If I’m looking at something yellow, I know it’s a comment. Limit the number of different colors to what you can remember. If you swap green and purple in my editor, it’ll be a catastrophe. If somebody swapped colors in yours, would you even notice? Something there isn’t a lot of. Remember—we want highlights to stand out. That’s why I don’t highlight variables or function calls—they are everywhere, your code is probably 75% variable names and function calls. I do highlight constants (numbers, strings). These are usually used more sparingly and often are reference points—a lot of logic paths start from constants. Top-level definitions are another good idea. They give you an idea of a structure quickly. Punctuation: it helps to separate names from syntax a little bit, and you care about names first, especially when quickly scanning code. Please, please don’t highlight language keywords. , , , stuff like this. You rarely look for them: “where’s that if” is a valid question, but you will be looking not at the the keyword, but at the condition after it. The condition is the important, distinguishing part. The keyword is not. Highlight names and constants. Grey out punctuation. Don’t highlight language keywords. The tradition of using grey for comments comes from the times when people were paid by line. If you have something like of course you would want to grey it out! This is bullshit text that doesn’t add anything and was written to be ignored. But for good comments, the situation is opposite. Good comments ADD to the code. They explain something that couldn’t be expressed directly. They are important . So here’s another controversial idea: Comments should be highlighted, not hidden away. Use bold colors, draw attention to them. Don’t shy away. If somebody took the time to tell you something, then you want to read it. Another secret nobody is talking about is that there are two types of comments: Most languages don’t distinguish between those, so there’s not much you can do syntax-wise. Sometimes there’s a convention (e.g. vs in SQL), then use it! Here’s a real example from Clojure codebase that makes perfect use of two types of comments: Per statistics, 70% of developers prefer dark themes. Being in the other 30%, that question always puzzled me. Why? And I think I have an answer. Here’s a typical dark theme: and here’s a light one: On the latter one, colors are way less vibrant. Here, I picked them out for you: This is because dark colors are in general less distinguishable and more muddy. Look at Hue scale as we move brightness down: Basically, in the dark part of the spectrum, you just get fewer colors to play with. There’s no “dark yellow” or good-looking “dark teal”. Nothing can be done here. There are no magic colors hiding somewhere that have both good contrast on a white background and look good at the same time. By choosing a light theme, you are dooming yourself to a very limited, bad-looking, barely distinguishable set of dark colors. So it makes sense. Dark themes do look better. Or rather: light ones can’t look good. Science ¯\_(ツ)_/¯ There is one trick you can do, that I don’t see a lot of. Use background colors! Compare: The first one has nice colors, but the contrast is too low: letters become hard to read. The second one has good contrast, but you can barely see colors. The last one has both : high contrast and clean, vibrant colors. Lighter colors are readable even on a white background since they fill a lot more area. Text is the same brightness as in the second example, yet it gives the impression of clearer color. It’s all upside, really. UI designers know about this trick for a while, but I rarely see it applied in code editors: If your editor supports choosing background color, give it a try. It might open light themes for you. Don’t use. This goes into the same category as too many colors. It’s just another way to highlight something, and you don’t need too many, because you can’t highlight everything. In theory, you might try to replace colors with typography. Would that work? I don’t know. I haven’t seen any examples. Some themes pay too much attention to be scientifically uniform. Like, all colors have the same exact lightness, and hues are distributed evenly on a circle. This could be nice (to know if you have OCD), but in practice, it doesn’t work as well as it sounds: The idea of highlighting is to make things stand out. If you make all colors the same lightness and chroma, they will look very similar to each other, and it’ll be hard to tell them apart. Our eyes are way more sensitive to differences in lightness than in color, and we should use it, not try to negate it. Let’s apply these principles step by step and see where it leads us. We start with the theme from the start of this post: First, let’s remove highlighting from language keywords and re-introduce base text color: Next, we remove color from variable usage: and from function/method invocation: The thinking is that your code is mostly references to variables and method invocation. If we highlight those, we’ll have to highlight more than 75% of your code. Notice that we’ve kept variable declarations. These are not as ubiquitous and help you quickly answer a common question: where does thing thing come from? Next, let’s tone down punctuation: I prefer to dim it a little bit because it helps names stand out more. Names alone can give you the general idea of what’s going on, and the exact configuration of brackets is rarely equally important. But you might roll with base color punctuation, too: Okay, getting close. Let’s highlight comments: We don’t use red here because you usually need it for squiggly lines and errors. This is still one color too many, so I unify numbers and strings to both use green: Finally, let’s rotate colors a bit. We want to respect nesting logic, so function declarations should be brighter (yellow) than variable declarations (blue). Compare with what we started: In my opinion, we got a much more workable color theme: it’s easier on the eyes and helps you find stuff faster. I’ve been applying these principles for about 8 years now . I call this theme Alabaster and I’ve built it a couple of times for the editors I used: It’s also been ported to many other editors and terminals; the most complete list is probably here . If your editor is not on the list, try searching for it by name—it might be built-in already! I always wondered where these color themes come from, and now I became an author of one (and I still don’t know). Feel free to use Alabaster as is or build your own theme using the principles outlined in the article—either is fine by me. As for the principles themselves, they worked out fantastically for me. I’ve never wanted to go back, and just one look at any “traditional” color theme gives me a scare now. I suspect that the only reason we don’t see more restrained color themes is that people never really thought about it. Well, this is your wake-up call. I hope this will inspire people to use color more deliberately and to change the default way we build and use color themes. Look at something and tell what it is by its color (you can tell by reading text, yes, but why do you need syntax highlighting then?) Search for something. You want to know what to look for (which color). Green for strings Purple for constants Yellow for comments Light blue for top-level definitions Explanations Disabled code JetBrains IDEs Sublime Text ( twice )

0 views
iDiallo 3 weeks ago

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 3 weeks 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 4 weeks 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 months 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 months 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 months 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 months 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 months 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
Allen Pike 1 months ago

UX Entropy

In the olden days, video calls were hard. Circa 2012, if your next meeting was online, it was important to start the process 5-10 minutes early. The process, at that time, was some or all of the following incantations and rituals: With luck, you would eventually be in the meeting. The other participants, often, would not be. Regrettably, each participant also needed to do the incantations, and they might not have started early. They might even be stuck. For example, the person you’re meeting might think they’re waiting for you, so they’ve multi-tasked to another app – but surprise! GoToMeeting or WebEx or whatever actually needed them to click “OK” or “Update” or “Ẓ̴͝a̴̡̕l̷̙̓g̶̫̔ó̸̻” to continue the joining process. After 5-10 minutes you would politely email your colleague, asking if they were still joining. Often enough you’d find yourself attempting to help people troubleshoot the above steps via email, which was… not enjoyable. This was all obviously bad. Any user could see it was bad, but it seemed – oddly – like the companies supporting these apps were kind of blind to it. Or, at least, their enterprise customers weren’t demanding better. As the story goes , Eric Yuan, then an executive at WebEx, was aware how clunky these product experiences were, and was ashamed of it. He felt that customers deserved a more user-centric video product, with excellent call quality, that ensured anybody could join a call with one click. In January 2013, his new startup launched Zoom 1.0. They employed some clever tricks to make sure Zoom seamlessly installed and stayed up to date, so anybody could always join a call in one click. They pushed hard to ramp up the video quality. They prioritized UX at all costs. The formula worked. A few months after launching 1.0, Zoom had 1 million users. In April 2019, they IPOed with $600M of revenue, were profitable, and were doubling yearly. By then they were well-known as the video app with the best call quality and UX, so when the pandemic happened the following year, Zoom was propelled to household name status. Today, they have over $1B/yr in profit, and continue to grow. Zoom is one of the great startup success stories. It’s also slowly falling apart. Success at scale always causes problems. Enterprise software success, doubly so. The first hurdle for Zoom, shortly after their IPO, was security issues. These ranged from underpowered encryption to leaky analytics to the revelation that their legendary one-click meeting flow was itself a security vulnerability . With market dominance in hand and billions of dollars of enterprise revenue on the line, Zoom started to unwind their approach of usability at all costs. Zoom founder Eric Yuan on this shift : One-click is important. However, you need to make sure there’s not any potential issue, any potential violation of the operating system. Sometimes we have to sacrifice usability for privacy or security, that’s exactly what we did. We now think security or privacy [is] even more important than that. And objectively, this is good! We want the software everybody uses to communicate to be private and secure. But it’s also a change in mindset from what made the product great in the first place. The defaults get locked down, the settings panels balloon, and Zoom is that much less likely to incubate the next team communications breakthrough. Zoom was also one of the companies most thrashed around by the pandemic. While from the outside the surge in usage might have seemed like a blessing, it ultimately caused Zoom more trouble than it was worth. Yuan again: I really wish there was no COVID. Zoom would be a much better company today. COVID, I do not think really helped us that much except for the brand recognition. For everything else, I feel like there was a negative impact to our business in terms of culture, and growth, and the internal challenge, or the competitive landscape. Everything else… I feel like it’s not good for us. When your company goes from 2000 employees to 6000 in 2 years because of an event outside your control, you’re gonna have a bad time! You’re also going to get even more settings screens. How many settings, you ask? Developing a clear and coherent product is hard. Developing a clear and coherent product with 6000 other people is even harder! The other day I had to log in to Zoom to change one of these myriad settings. Shown below is what Zoom looks like today when somebody at a 2-person startup logs in. Now. In your opinion, what is the ideal number of times this screen should try to sell a startup an upgrade to allow over 100 people in a meeting? Maybe… 6 separate upsells? (The sixth is hard to spot, it’s partially hidden by the popover for the 5th upsell.) Of course nobody at Zoom decided 6 was the right number. While there is probably somebody at Zoom thinking about the 2-person startup UX, there are clearly 20x as many people concerned about increasing the number of customers who sign up for 500-person meetings. This dashboard is a veritable banner that says “Our KPI is selling Large Meeting add-ons.” Which I’m sure is logical! At least in the short term. At the same time though, this stuff gives users the ick. “Avoid the ick” is not an OKR, and “% of users that hate navigating your settings” does not appear on your KPI dashboard. But it still accumulates. When this kind of rot happens, it’s obviously bad. Any user can see it’s bad. But, importantly, enterprise customers don’t demand fewer settings, nor sane marketing position toward startups. So, often, these situations degrade. It’s a tale as old as time. Occasionally a market leader who’s gotten off track will rally – especially if they’re still founder-led – to save themselves from fossilization and reinvent. In theory, Zoom could lever their position, in the center of billions of work meetings, into becoming a critical part of future AI-accelerated work. More often, the gaps grow large enough that they spawn new startups. Blind spots and product debt compound until they recreate the situation that inspired Yuan in 2011: the market leader’s UX will be bad enough, and the potential for what could be will be compelling enough, that a worthy successor will launch. People will love it, and it will grow like wild. Either way, we’ll look back on today as the bad old days, and appreciate how much better software has gotten. Customers will continue to demand better, and eventually someone will provide. It’s the circle of life. Find the meeting URL Find the meeting passcode Download a specific videoconferencing app Agree to and accept various things Dial in separately to get audio Troubleshoot your audio or video Wait for an update to download Wait for the videoconferencing app to restart Wait for your whole computer to restart Repeat some of the above steps, now that your computer has restarted

0 views