Full Width [alt+shift+f] Shortcuts [alt+shift+k]
Sign Up [alt+shift+s] Log In [alt+shift+l]
1

There is Definitely a Grid

from Daniel De Laney [alt+shift+b] in technology

Grids are the best thing to ever happen to graphic design. They form a rational basis for organizing information. They support the harmonious distribution of elements and visual weight. We don’t design things with grids because it’s easy, or because everyone else is doing it. It’s not a trend. We design with grids because they help the brain process information. The text of this article is left-aligned, and there’s a reason for that. Left-aligned text gives the eye a consistent line to return to. Instead of searching for the beginning of each new line, we can use a kind of muscle memory to avoid wasted cognitive effort. This is a perfect way to understand how great the grid is. Grids are like left-aligned text for your entire layout. They allow a rational and consistent method of scanning the information. They establish hierarchy and rhythm. They support good proportion. Grids are everything good and right with design. There could, of course, be an alternative to the grid. Grids work because they support the human brain. Intense study and effort could reveal other systems that support it equally well, or even better. “Perhaps I’ll run out and invent something better than the grid for my next client project, to help spice things up,” however, is not a good plan. It’s a bad plan in the same way that it’s a bad plan to design your own cryptography, or your own aircraft engine. The chances your design won’t fail are are slim, and the consequences are often catastrophic. If you invent something novel for the sake of novelty, without considering why the standard exists, you’re likely to come up with something bad. Take this example, in which the hover state for a link is strikethrough text: It’s different, right? You usually don’t see that. There’s a reason. Strikethrough isn’t just a cool look—it has meaning. It means that something is no longer valid. Strikethrough would be appropriate in the event of an error. If the link no longer went anywhere, or there were some...
10th Jun 2016

Stay updated

Get a weekly newsletter with the top 5 articles worth reading every week.

More from Daniel De Laney

Ideal failures

The way I used to design UI was to sit with paper sketches, or Figma, or a React prototype with no back end. Imagine every failure mode. Design beautiful flows for each. I slipped into this mistake while working on LanWhisper, a voice dictation app. I designed for the failure modes I could imagine, drew the flows, and shipped the app. Then real users hit failure modes that I hadn’t anticipated. For example, the AI transcription model can return hallucinated text even if the input audio is empty. I had imagined that if the model returned text at all then the app was working. This failure wasn’t in my carefully designed list of ideal failures. Whoops. The problem is that a representation of a system only contains what you put into it. The failure modes it shows you are exclusively the ones you already thought of. This is the same mistake as designing for users you’ve never talked to. Designers know that’s a trap. The same logic applies to the systems we design: imagined systems aren’t a substitute for real ones. When designing non-trivial systems, imagination is no longer your best source of truth. The system itself is. And increasingly, designers can build it themselves. Do. Build it, instrument it, surface every piece of state. You can see and feel how the system works instead of projecting the ideal behavior onto some drawings you linked together. Your list of ideal failure modes isn’t real.

13th May 2026 • 1 votes
I built a timer I can’t fail to set

Have you ever gotten to the end of a long work day and realized you’re no closer to your goals? I have. Sure, I was doing a lot of stuff. But I wasn’t pausing to ask whether I was doing the right stuff. Or whether my approach was working. Or if I was spending the right amount of time on it. My fingers were moving but I wasn’t really thinking. So I needed a reliable way to interrupt my “unproductive productivity” and actually think. The obvious solution was a timer. Unfortunately, if you use timers a lot, you learn to dismiss them reflexively. And it’s really easy to forget to set the next timer. A week later, I’d realize: “Hey, that timer idea really worked, I should get back to that.” And then I didn’t. So I built a new kind of timer. It does 2 unique things: It asks what I’ll focus on. It gradually blurs my screen if I don’t set a new timer. When it asks “What will you focus on?” I answer in a word or two, start the next timer, and keep working. Having to name my intention keeps me fully aware of my trajectory. If I’m in danger of drifting, it’s obvious. And if I avoid thinking for long enough, my screen starts getting harder to see. If I’m making great progress on something that doesn’t require much thinking, I can set the timer for a longer duration, maybe 30 minutes. But if I’m working on something more open-ended, I might tighten the leash all the way down to 3 minutes. Then I can’t get off track. Unlike a regular timer, I can’t fail to set the next one. If I don’t answer it promptly, the screen gradually becomes less readable until I do. If I wanted to avoid answering, I’d have to make a conscious decision to close the app. I’d have to decide to be less productive. I never do. This small intervention has worked beautifully. Not only am I catching unproductive divergences earlier, I’m noticing fewer of them over time. It seems to be training me to do more and better thinking. It’s not a replacement for a journal. I love journaling, but that takes more than a few seconds, and there’s a lot of benefit to reflecting more frequently. If you’re running macOS, Intention is available here. I use it every day, and I think it’s the superior way of working. Process Tools like Cursor and Claude Code have dramatically changed the way I approach the design process. In the past, I would have sketched some potential solutions, put together a clickable prototype, and user tested that. But how much does that user test actually test? A traditional prototype in Figma or the like is paper-thin. I’m testing much less than the full experience. Now I can sculpt functional software as I go. That means I can build something, really use it, notice opportunities to make it better, and implement the changes I’d like to see, all in the same working session. This fast and robust feedback loop means better software. That said, sketches are still faster. I’ll bounce back and forth between sketching and building as appropriate. It’s far more practical to draw usable imagery than to generate it. The dock icon is drawn by hand in Figma with the pen tool and layer effects. The candle in the dark serves as both a metaphor for the app’s purpose illuminating the way forward, and an allusion to meditative practice. Why does this menu bar application appear in the dock? The answer is in the riddle of keyboard focus. An app that steals my keyboard focus every 3 minutes would be impossible to use, so instead the appearance of the timer window in the top right of the screen gently reminds me, and the gradual blurring of the screen gets more insistent over time. But the app does not take keyboard focus itself. This balance is what makes the app work. So I need a fast and intuitive way to switch to the timer window when I’m ready. Cmd+Tab has to work, and having the app appear in the dock enables that. Inspiration The visual inspiration for the branding is the early 1600s Caravaggio painting Saint Jerome Writing. The aging scholar Jerome, remembering the nearness of death, absorbs himself completely in the most noble work he can find to do while ignoring everything else. This is our task.

2nd Dec 2025 • 1 votes
Free software scares normal people

I’m the person my friends and family come to for computer-related help. (Maybe you, gentle reader, can relate.) This experience has taught me which computing tasks are frustrating for normal people. Normal people often struggle with converting video. They will need to watch, upload, or otherwise do stuff with a video, but the format will be weird. (Weird, broadly defined, is anything that won’t play in QuickTime or upload to Facebook.) I would love to recommend Handbrake to them, but the user interface is by and for power users. Opening it makes normal people feel unpleasant feelings. This problem is rampant in free software. The FOSS world is full of powerful tools that only have a “power user” UI. As a result, people give up. Or worse: they ask people like you and I to do it for them. I want to make the case to you that you can (and should) solve this kind of problem in a single evening. Take the example of Magicbrake, a simple front end I built. It hides the power and flexibility of Handbrake. It does only the one thing most people need Handbrake for: taking a weird video file and making it normal. (Normal, for our purposes, means a small MP4 that works just about anywhere.) There is exactly one button. This is a fast and uncomplicated thing to do. Unfortunately, the people who have the ability to solve problems like this are often disinclined to do it. “Why would you make Handbrake less powerful on purpose?” “What if someone wants a different format?” “What about [feature/edge case]?” The answer to all these questions is the same: a person who needs or wants that stuff can use Handbrake. If they don’t need everything Handbrake can do and find it bewildering, they can use this. Everyone wins. It’s a bit like obscuring the less-used functions on a TV remote with tape. The functions still exist if you need them, but you’re not required to contend with them just to turn the TV on. People benefit from stuff like this, and I challenge you to make more of it. Opportunities are everywhere. The world is full of media servers normal people can’t set up. Free audio editing software that requires hours of learning to be useful for simple tasks. Network monitoring tools that seem designed to ward off the uninitiated. Great stuff normal people don’t use. All because there’s only one UI, and it’s designed to do everything. 80% of the people only need 20% of the features. Hide the rest from them and you’ll make them more productive and happy. That’s really all it takes.

30th Oct 2025 • 1 votes
Objectivity is superstition

An objective, external world is a non-falsifiable assumption. The prevailing theory is that our subjective experiences correspond to an external reality. However, they may simply be subjective through and through. That which we claim to be evidence of external reality is actually subjective experience, which may or may not have an external and objective cause. Any test devised to prove objectivity is evaluated within subjectivity and therefore does not require objectivity to explain the result. Some object to this, claiming that the consistency of experience is best explained by an external world. However, consistent experience does not require any external mechanism, let alone the specific one we have assumed. Claiming that belief in an external world is simpler is like claiming that belief in God is simpler; in truth we are inventing something vast and complex without evidence and agreeing not to question it. This is not science, it is a substitute for epistemic humility. Much as dreams appear consistent while dreaming, that which we consider waking experience may not actually be as consistent as we believe. However, questioning this is unproductive reasoning because it undermines the value of reason itself. We must assume our experiences are rational and consistent, or else give up thinking altogether. Experience is the only reality which is detectable. Whatever experience is, it is real and directly perceptible, unlike objectivity. Claims that experience is an illusion presuppose an objective world to which experience does not correspond. Pragmatic truth is supportable, correspondence is not. If an objective world can’t be proven, neither can we prove that knowledge does or does not correspond with it. That which produces a consistent effect in experience is useful in influencing experience in the desired way, therefore science is useful. Materialism is religious faith. Just as we once invented a spirit world to help explain our experiences, we invented an objective world for which there is similar quality evidence. Both are assumed to explain experience, yet neither is directly known. The assertion that matter gives rise to experience is no more compelling than the assertion that experience gives rise to matter. The assumption of an external world has zero explanatory power, as consistent experience does not require it. Materialism is superior to classical religions in that it responds to pragmatic truth, but it still accepts unsupportable metaphysical claims and regards them as unquestionable. By contrast, noting that we have experiences does not require extrapolation or invention. Modern civilization is optimizing materials, not experiences. Focus on economic metrics has allowed us to make tremendous progress in reducing starvation and otherwise improve the experience of the least fortunate. Nonetheless, the subtle error of conflating material improvement with improvement in well-being has consequences. In advanced societies, increases in abstract indicators of material wealth like GDP have been accompanied by negative changes in consciousness: stress, social disconnection, and increased suicide. The materialist assumption that improving external conditions will always trickle down to better experiences is demonstrably unreliable. Often, this assumption results in methods which improve economic indicators by reducing experiential well-being, and in these cases it is worse than nothing. In addition to misallocating its priorities, modern civilization also conditions people to feel powerless over their own well-being. As materialist structures (corporations, governments, economic systems) become more dominant, individuals are increasingly absorbed into mechanisms designed to optimize external conditions rather than subjective experience. People come to believe that their quality of life is dictated by forces beyond their control. The best way to improve experience is to optimize it directly. The only rational goal is maximizing satisfaction. Long-term positive changes in consciousness are what is best in life. If a person achieves material or hedonistic aims but is unsatisfied in the long term, they are having a negative experience and are working against themselves. Secure, nourish, nurture, and build yourself and your community. Seek what is satisfying and aesthetic—that which feels good and true and beautiful. Unlike materialist assumptions, this requires no external faith, only a direct commitment to improving the reality we actually experience.

17th Mar 2025 • 1 votes
Chat is a bad UI pattern for development tools

Code forces humans to be precise. That’s good. Computers need precision. But it also forces humans to think like machines. For decades we tried to fix this by making programming more human-friendly. Higher-level languages. Visual interfaces. Each step helped, but we were still translating human thoughts into computer instructions. AI was supposed to change everything. Finally, plain English could be a programming language. No syntax. No rules. Just say what you want. The first wave of AI coding tools squandered this opportunity. They make flashy demos but produce garbage software. People call them “great for prototyping,” which means “don’t use this for anything real.” Many blame the AI models, saying we just need them to get smarter. This is wrong. Yes, better AI will make better guesses about what you mean. But when you’re building serious software, you don’t want guesses. Not even smart ones. You want to know exactly what you’re building. Current AI tools pretend writing software is like having a conversation. It’s not. It’s like writing laws. You’re using English, but you’re defining terms, establishing rules, and managing complex interactions between everything you’ve said. Try writing a tax code in chat messages. You can’t. Even simple tax codes are too complex to keep in your head. That’s why we use documents—they let us organize complexity, reference specific points, and track changes systematically. Chat reduces you to memory and hope. This is the core problem. You can’t build real software without being precise about what you want. Every successful programming tool in history reflects this truth. AI briefly fooled us into thinking we could just chat our way to complex software. We can’t. You don’t program by chatting. You program by writing documents. When your intent is in a document instead of scattered across a chat log, English becomes a real programming language: You can see your whole system at once You can clarify and improve your intent You can track changes properly Teams can work on the system together Requirements become their own quality checks Changes start from clear specifications The first company to get this will own the next phase of AI development tools. They’ll build tools for real software instead of toys. They’ll make everything available today look like primitive experiments.

3rd Feb 2025 • 1 votes

More in technology

The Idea Factory

My mail, WhatsApp and Signal now live in one app I built myself. I called it Contact. It is not a chat app and not an AI app, it sits somewhere in between. When I tried to draw what it is in my notebook, a factory came out. This post explains that drawing, starting with a puzzle. A puzzle for the class At Jurre's school the day starts with a "binnenkomer", a small opening activity, and every child takes a turn. The message that it was his turn next came in through the WhatsApp group of his class. So one evening Jurre sat down and made his own: nine dots, and a rule. "Je moet elk stipje in een eigen vakje hebben, maar je mag maar twee vierkanten tekenen." Every dot in its own box, but you may only draw two squares. Jurre's puzzle: the rule on top, nine dots, and one of the solutions He wanted copies, a clean one for everybody. I took a photo, which lands in my own photo library at home within seconds. In Contact I opened a session and typed what I wanted: take the latest photo, make a printable page with the text and the empty puzzle, without the solution, and print it. One page first. The agent did not know where the printer was. It scanned the network, found a Canon that was asleep, told me so, and waited until I switched it on. Along the way it found the original message from the class group in Contact's own WhatsApp archive, so it knew what the page was for. The session in Contact: the agent looks for the printer, I tell it what to make Printing, on a printer that nobody had set up for this The first page came out faded, one cartridge was nearly empty. The agent found a print mode that still gave deep black, and then the copies came out. Within the hour there was a stack on the table: the empty square, the nine dots, the rule in a proper font. The next morning Jurre took them to his class. The result: the puzzle without the solution, ready to hand out in class That small evening has everything in it. Someone has an idea. It comes in, somebody decides it matters, a machine with enough context and energy turns it into a thing, and the thing goes back to the people. That is the factory. The drawing The drawing from my notebook: people, ideas, triage, the machine with its chimney, and the long arrow back On the left: people. They have ideas, and those come in every shape: a mail, a WhatsApp, a voice message, a screenshot, a sketch on a sheet of paper. Then triage, the funnel. Not everything needs me, and not everything needs me now. Contact reads everything that comes in on the machine in the homelab: my own hardware, boring Debian, offline. It sorts what needs me from what can wait, and groups messages into conversations per person or per topic, whatever app they came from. Fewer apps, less fiddling, but more context and more control. Contact on the laptop, here with sample data: what needs me, drafts, and a conversation with a draft reply waiting Then the machine itself: creation plus context. A session is an agent working on one thing, started from a conversation with one tap. What makes it good is not the model, it is the context it gets. My notes and rules. Every log line of all my apps and computers, well over a million signals a day. The photo library. Customer files and documented source code. The conversation it came from. The machine knows where it stands before it starts. On top sits the chimney: energy, in tokens, compute and memory. This is the part that is new. Context used to be a pile of documents. With enough energy it becomes fluid, you can shape it. Ask it, rewrite it, turn it into a page, a prototype or a print. The chimney, measured: tokens per model I will be honest about the chimney. Some weeks we burn millions of tokens on a single feature, and I do not always know if it was worth it. Let the record show that I spare no cost or effort to chase software feel. But a factory with a chimney and no meter is something to keep an eye on. Out of the machine come artifacts: a draft reply, a preview page, a prototype, a printed puzzle, a website, a game. Nora wanted a game too. She drew a rainbow and told me about a unicorn on a skateboard collecting colours in a fluffy world of clouds, and that became the game. Same factory, different input. Nora's input for her game: a rainbow, clouds and colours to collect Nora playing the game that came out of her drawing Another product of the same factory: the music app, native on iOS and on Android And then the long arrow at the bottom: feedback. Ideas, artifacts and products go back to the people. A draft reply goes back to the customer, after I read it and approve it on my phone; Contact never sends anything by itself. The puzzle went back to the class. What people say about it comes in again on the left, and the loop closes. Not a chat app, not an AI app There are apps for people: Teams, Slack, WhatsApp. There are apps for AI. Contact is neither. It sits between them, on them and in them, at the crossing of people and machine. It is made for making things, and for learning while you do. When it works I hardly notice it: a message comes in, a session picks it up, a draft is waiting when I look. It runs as a native app on the iPhone, the Vision Pro and the laptop, all sharing one idea of what a conversation and a session are. On the Vision Pro the sessions float next to each other, a very nice way to watch several streams of work at once. On the iPhone it is with me all day. A few weeks ago I wrote about making my own Android; that taught me how far you get without touching the operating system, if you own the data, the screens and the concept. Contact is what came out of that lesson. The hardest word When making is cheap and fast, the difficult part is saying no. At one point I asked for my lock screen to show the state of the factory: what waits for me, which session has a question. It was built, I tested it on my phone in the evening, and it worked. I looked at it and decided it was not useful to me. Back to plain notifications, the same evening, nothing left behind. The lock screen experiment: built, tested, and switched off again the same evening My personal reflection helps here. Writing in the notebook makes my norms visible: privacy, the feel of software, and the rule "das Beste oder nichts". That rule leads to "no" quite often. A not-doing choice is a real choice, and now that almost anything can be made, it may be the most important one. Conclusion Contact is a small factory. People and their ideas go in, triage decides what matters, a machine with context and energy makes something, and it goes back to the people. The trick is not the model, it is the context. And the courage to throw away what you made when it is not good enough. So if your inbox feels like a pile of messages, maybe it is a pile of ideas waiting for a factory.

8 hours ago • 1 votes
The Pulse: RoR creator sparks new “death of coding by hand” debate

In his Rails World keynote, David Heinemeier Hansson (DHH) declared the end for writing code by hand for professional work – at 37signals at least. Is this change now unstoppable?

13 hours ago • 1 votes
This mouse droid knows how to party

Not a lot of thought went into the “mouse droid” in the first Star Wars movie. It was just a bit of cute world-building, created by putting a box on an RC car. But it became a fan favorite and that in-universe model, the MSE-6, appears throughout subsequent movies, TV shows, and video games. All […] The post This mouse droid knows how to party appeared first on Arduino Blog.

16 hours ago • 1 votes
Understanding the AI That Drives Robots

An Explanation of Vision-Language-Action Models

18 hours ago • 1 votes
📚 BoredReading

You seem to be enjoying this.

Join free to unlock everything.

Create free account

Already have an account? Sign in