Culture Debt
Every organization carries culture debt. The healthy ones pay attention to it. The unhealthy ones discover it only when the cost becomes too great to ignore.
The online whiteboard of Kristofer Palmvik
Every organization carries culture debt. The healthy ones pay attention to it. The unhealthy ones discover it only when the cost becomes too great to ignore.
A collection of small, simple, single-task tools, mostly designed to help neurodivergent people with tasks they find overwhelming or difficult.
Boring AI features are reliable AI features that feel invisible to users - they just work. Read only what you need. Constrain with clear rules. Act with structured outputs and safe tools. Explain what happened. Start with the smallest useful feature. Use the patterns that fit your use case. Monitor everything. Improve based on real user behavior, not theoretical performance metrics. The goal isn’t to build impressive AI demos. It’s to ship features that users depend on every day.
Sarcasm can be hard to convey in writing but I hope you get the point of this article. Personally, I will not try to fix Apple’s bad design decisions in the websites I build. I will not follow any of the “advice” I just gave. Apple themselves are not following it either. I actually think the talented folks at Apple did their job as well as they could given the constraints of Liquid Glass™. So much thought went into it. It’s just a terrible idea for a design language in the first place.
With stacking we’re introducing a lot of processes and tools. These obfuscate problems that we can solve at the level of people and how they work together. These can be harder to address, but the value in doing so is incomparably larger. Trunk based development doesn’t have all the answers, but the questions it gets us to ask are the right ones. And in my book, when it comes to software engineering, a good question trumps a complex answer every day.
When team members are safe, can learn and adapt, share a common purpose, understand and support each other, and stay accountable to one another, you’ve got a healthy team. But a team only becomes high-performing as they create and maintain virtuous cycles that continuously improve health, allowing everyone to grow.
If I had to prioritise which ones to start with, I’d go with the start: Start at agreement and Give options. Both are really easy to do and are ‘quick wins’ so to speak. I’d then recommend to start experimenting with some of the techniques I shared in the cognitive dissonance section like reframing things as questions.
Top of the list, invariably, is communication skills. The best developers work to understand and be understood clearly and effectively. So much of what goes wrong in software development can be traced back to poor (or no) communication. Written, verbal, aural. They have good comprehension, they can articulate complex ideas simply to different audiences, and – most importantly – they actually communicate.
Don’t wait until you have another offer to communicate what’s not working. Don’t wait until your last week to document what you know. Don’t wait until you’re burned out to manage your energy strategically.
Every name you choose shapes how easy or hard the future will be for yourself and your team. When tempted to accept vague or confusing names, remember: that choice echoes through dozens of files and months of development. Name it like your future self’s sanity depends on it. Because it does.
In my experience, when people are given accountability but not the reins to drive change, they disengage. Why pour your soul into something when your best ideas get vetoed by someone who isn’t even in the room? I’ve felt this sting myself early in my career. After six months of pushing boulders uphill, I stopped feeling responsible. The failures weren’t mine. They were the system’s.
A computer can never be held accountable. That’s your job as the human in the loop. Almost anyone can prompt an LLM to generate a thousand-line patch and submit it for code review. That’s no longer valuable. What’s valuable is contributing code that is proven to work.
The fundamental thread through all these roles is strategy. I believe strategic thinking will be the new constraint with AI. Strategy is not goals or vision statements. It is a clear path to achieve those goals. And it is always best done in a group with diverse perspectives.
I have a lot to say about this, but we are packing it up into something a bit more digestible, so I’ll just leave you with a few core beliefs that I think will be increasingly important in the age of AI.
Lambros distinguishes between two kinds of “brilliant jerks.” The first type is difficult but ultimately valuable: highly capable people who may be abrasive or “spiky” yet can be managed productively with the right structure. Then there is the second type, whose brilliance comes at the expense of others and who damages teams and relationships wherever they go.
The most important teams in a B2B software company are engineering and sales. Full stop, no exceptions, no further questions. You’re either building the product or selling the product, and everything else is secondary at most.
Large language models are not neutral mirrors of the world. They systematically privilege wealthy, Western, and data-rich places while marginalizing much of the Global South. This project demonstrates that ChatGPT consistently ranks places like the United States and Western Europe more positively and portrays poorer regions as less desirable.
We identified a misconfigured Supabase database belonging to Moltbook, allowing full read and write access to all platform data. The exposure included 1.5 million API authentication tokens, 35,000 email addresses, and private messages between agents. We immediately disclosed the issue to the Moltbook team, who secured it within hours with our assistance, and all data accessed during the research and fix verification has been deleted.
Instead of copying the Spotify model, or model from another random company (e.g. FitBit, John Deere), grow your own Agile model. It is the only long-term path to success. Instead, focus on the things that Spotify had going underneath the hood
The SQL Server Maintenance Solution comprises scripts for running backups, integrity checks, and index and statistics maintenance on all editions of Microsoft SQL Server 2008, SQL Server 2008 R2, SQL Server 2012, SQL Server 2014, SQL Server 2016, SQL Server 2017, SQL Server 2019, SQL Server 2022, and SQL Server 2025. The solution is based on stored procedures. The solution has been designed for the most mission-critical environments, and it is used in many organizations around the world.
WebMCP aims to provide a standard way for exposing structured tools, ensuring AI agents can perform actions on your site with increased speed, reliability, and precision. By defining these tools, you tell agents how and where to interact with your site, whether it's booking a flight, filing a support ticket, or navigating complex data. This direct communication channel eliminates ambiguity and allows for faster, more robust agent workflows.
WebMCP API is a new JavaScript interface that allows web developers to expose their web application functionality as “tools” - JavaScript functions with natural language descriptions and structured schemas that can be invoked by agents, browser’s agents, and assistive technologies. Web pages that use WebMCP can be thought of as Model Context Protocol [MCP] servers that implement tools in client-side script instead of on the backend. WebMCP enables collaborative workflows where users and agents work together within the same web interface, leveraging existing application logic while maintaining shared context and user control.
The LLM experiment has taught us one thing: people are willing to tolerate error, explain themselves, collaborate, trust. Today, they are choosing to invest this positive energy into a synthetic slop extruder. But tomorrow, they could invest it into their fellow human beings, if they chose to do so.
Certainly, there must be a way to line up a list of icons or logos so they are somewhat proportional to one another. I haven’t seen anyone write about this issue specifically, so I’m naming it the “Proportional Image Normalization Formula,” which is a grandiose name for what is basically grade school math
A deep dive into the math behind making mismatched brand logos actually look good together. And a tiny React library that does it for you.
A tiny library that makes logos look good together. No framework required. Real-world logos are messy. Some have padding, some don't. Some are dense and blocky, others are thin and airy. Put them in a row and they look chaotic. Logo Soup fixes this automatically.
All of those things had to be true at the same time. Well-documented target API, comprehensive test suite, solid build tool underneath, and a model that could actually handle the complexity. Take any one of them away and this doesn't work nearly as well.
Create executable demo documents that show and prove an agent's work. Showboat helps agents build markdown documents that mix commentary, executable code blocks, and captured output. These documents serve as both readable documentation and reproducible proof of work. A verifier can re-execute all code blocks and confirm the outputs still match.
Rails-like framework for React, Node.js and Prisma. Build your app in a day and deploy it with a single CLI command.
tldraw, the outstanding collaborative drawing library, are moving their test suite to a private repository - apparently in response to Cloudflare's project to port Next.js to use Vite in a week using AI. They also filed a joke issue, now closed to Translate source code to Traditional Chinese.
This post is about the brute-force reverse engineering of binary (compiled) programs using Large Language Models (LLMs) to automate this two-part problem: decompilation and conversion to a modern programming language.
SSE in .NET 10 is the perfect middle ground for simple, one-way updates like dashboards, notification bells, and progress bars. It's lightweight, HTTP-native, and easy to secure using your existing middleware. However, SignalR remains the robust, battle-tested choice for complex bi-directional communication or massive scale requiring a backplane.
Going forward, we will use traditional settings UIs even less because chat has the potential to become the “meta interface.” It’s both our window into the product and the way we shape our experience with the product — the interface for the interface.
Our profession is learning Both as product developers (in the wider sense of the word), and consultants. The tools, ways, ideas and needs are ever changing. We have chosen to be in school for ever. Welcome! We need to keep learning in the paradigm shift too. But when you do - learn deeper, reflect and think deeply. Use the tool, but focus on the practice. Do the practice but try to understand the principle behind it.
Concept curators operate in environments where the constraint is not information, but interpretation. Businesses are flooded with dashboards, metrics, reports, trends, think pieces, and opinions. The problem is rarely a lack of data. It’s deciding which signals matter and which can be ignored.
Shock! Shock! I learned yesterday that an open problem I’d been working on for several weeks had just been solved by Claude Opus 4.6— Anthropic’s hybrid reasoning model that had been released three weeks earlier! It seems that I’ll have to revise my opinions about “generative AI” one of these days. What a joy it is to learn not only that my conjecture has a nice solution but also to celebrate this dramatic advance in automatic deduction and creative problem solving. I’ll try to tell the story briefly in this note.
The main function of an icon is to help you find what you are looking for faster. Perhaps counter-intuitively, adding an icon to everything is exactly the wrong thing to do. To stand out, things need to be different. But if everything has an icon, nothing stands out.
I don’t like the idea of “give each menu item an icon” being the default approach. This posture lends itself to a practice where designers have an attitude of “I need an icon to fill up this space” instead of an attitude of “Does the addition of a icon here, and the cognitive load of parsing and understanding it, help or hurt how someone would use this menu system?”
AI in the workplace is transforming the technical systems. Much less attention is being paid to the cultural systems that surround it. New tools can be exciting, especially to management and motivated individual contributors. For the rest of your teams they can clearly be seen as threats to the “way we do things around here.” If we don’t address those systemic cultural issues we’ll never be able to take full advantage of these new tools in a way that truly maximizes their benefit.
As AI generates more of the code, the nature of how teams collaborate around changes is shifting. Review is one of the few systematic places where humans on a team exercise judgment together about the system they share. What they’re judging is changing – less mechanical correctness, more intent and direction – but the collaborative act is worth protecting.
Temporal is not just a better API. It's proof that the JavaScript community can solve long-standing problems together. After nearly 30 years, JavaScript finally has a modern datetime API. And this time, we got it right.
the whenwords library contains no code. Instead, whenwords contains specs and tests. The installation instructions are comically simple, just a prompt to paste into Claude, Codex, Cursor, whatever.
They may look at a very high-fidelity, live-data prototype and think that it can’t be all that hard to make the leap to something we can actually sell and service and that our customers can run their business on. But I’ve now witnessed more than a few product managers embarrass themselves in front of their engineers. So this article is intended for these people.
Throughout the ages, humans have come up with ideas. Some ideas never become more than a thought. Others spread globally, affecting people for a long time. The life of ideas seems to be an eternal cycle of birth, life, death, and rebirth.
Our migration to Hive Gateway is a story of pragmatic engineering execution. A small team replaced the core routing layer of Sweden’s largest property platform in under two months, with zero user-visible downtime and no latency regression.
The developers who will be best positioned in three years are the ones who started genuinely engaging with agentic coding today. Not using it as a fancy autocomplete. Actually engaging with it, letting go of implementation as the primary measure of their contribution, developing fluency in a new kind of collaboration between human judgment and machine capability.
Semantic anchors are well-defined terms, methodologies, and frameworks that serve as reference points when communicating with Large Language Models (LLMs). They act as shared vocabulary that triggers specific, contextually rich knowledge domains within an LLM’s training data. Think of them as shortcuts to rich context - instead of explaining a complex methodology from scratch, you can invoke a semantic anchor and the LLM will activate its entire knowledge base about that concept.
In my opinion and in short : I think digital gardens as digital spaces where people grows their ideas from seed to tree : 🌱 -> ☘️ -> 🍀 -> 🌿 -> 🌲 -> 🎄
A garden is a collection of evolving ideas that aren’t strictly organised by their publication date. They’re inherently exploratory – notes are linked through contextual associations. They aren’t refined or complete - notes are published as half-finished thoughts that will grow and evolve over time. They’re less rigid, less performative, and less perfect than the personal websites we’re used to seeing.
Everyone is talking about how quickly they’re building things, how many agents they’re using at the same time, and how much time they’re saving. I feel like if I’m working at a regular speed, I’m not doing enough.
Self-hosted GitHub Actions runners can be weaponized into persistent backdoors that communicate entirely over trusted channels. Because all traffic flows to github.com, traditional network defenses are largely blind to the threat.
The act of programming has lived in extract for 45 years and we’re used to that,” he said. Then the genie of generative AI coding assistants escaped from the bottle, “and all of those certainties have been thrown out of the window,” he said. Exploration doesn’t look very much like engineering from the books. “It’s about cutting corners to get answers, throwing away what you’ve done, starting over, being creative, sniffing out opportunities,” Beck said.