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.
Operators of AI models in Europe should pay "a revenue-based levy... reflecting their use of content publicly available online," Arthur Mensch wrote in an op-ed for the Financial Times. "Proceeds would flow into a central European fund dedicated to investing in new content creation and supporting Europe's cultural sectors," he added.
To design the most effective combinations, the engineers used AI to evolve novel body configurations. Instead of sticking with standard dog- or human-like designs, the AI churned out strange new “species” of machines that no human engineer would have conceived. When connected to other modules, the metamachines undulate like seals, bound like lizards, or spring like kangaroos.
Paperclip is a Node.js server and React UI that orchestrates a team of AI agents to run a business. Bring your own agents, assign goals, and track your agents' work and costs from one dashboard. It looks like a task manager — but under the hood it has org charts, budgets, governance, goal alignment, and agent coordination.
With the launch of models like Claude Opus 4.5, it suddenly became possible to ask AI to build something for you, and it’d do it in a nearly fully functional way. That level of accuracy led to people taking a hands off approach to app building, and even enabled people who’ve never coded before to make apps. Whether or not you like this trend is another discussion. Either way, there’s one thing that holds true: App Store review isn’t cut out for it.
This is, without exaggeration, one of the most comprehensive looks we’ve ever gotten at how the production AI coding assistant works under the hood. Through the actual source code. A few things stand out: The engineering is genuinely impressive.
The Claude Code source had been exposed, and the entire dev community was in a frenzy. My girlfriend in Korea was genuinely worried I might face legal action from Anthropic just for having the code on my machine — so I did what any engineer would do under pressure: I sat down, ported the core features to Python from scratch, and pushed it before the sun came up. The whole thing was orchestrated end-to-end using oh-my-codex (OmX) by @bellman_ych — a workflow layer built on top of OpenAI's Codex (@OpenAIDevs).
Turso is the lightweight database that scales to millions of instances. Build agents, AI assistants, and intelligent apps by deploying databases everywhere: on servers, browsers, and devices, just like files. Turso is a complete SQLite drop-in replacement, built for the agentic future.
Garage is a lightweight geo-distributed data store that implements the Amazon S3 object storage protocol. It enables applications to store large blobs such as pictures, video, images, documents, etc., in a redundant multi-node setting. S3 is versatile enough to also be used to publish a static website.
if something went wrong with our AI systems tomorrow, an unexplainable output, a biased decision, a data breach, a regulatory inquiry, who in this organisation would I call first? If the answer is a committee, a shared inbox, or a long pause followed by uncertainty, you already know what you need to build. One person. Clear mandate. Real authority. Full accountability.
The people who aren’t seeing the problems in the code, have never trained their RAS to look for problems in the code, and so they honestly don’t see them. “The code all looks great to me”. This is why we continue to propagate poor code - because we can’t fix what we can’t see.
We could ask… "If there are no blockers, why isn’t the work done yet?" "If there are no blockers, why are there two tickets with your name on them?" "If there are no blockers, why wasn’t there an update to this ticket today?" Almost certainly you’ll get a list of reasons that is mostly made up of real blockers that the team doesn’t think of as being blockers.
I have no idea what I actually believe about how AI will transform the industry. What I know is that if I get to work building it, I will learn what it is that I believe. They will reinforce each other. I will find my footing through walking the road and doing the work.
If you’re building a service that will eventually run multiple instances, this article is for you. I think you should run at least two instances from day one. Doing so helps you uncover hidden bugs early—like port conflicts, stale caches, and locking issues—so you can avoid expensive rewrites later.
Developers who try to micromanage agent output will struggle. Developers who learn to specify, verify, and iterate will thrive. The 10% that went up 1000x is judgment, specification, and verification. The 90% that went to zero is the typing.
Software development is one of the most capital-intensive activities a modern company undertakes, and it is also one of the least understood from a financial perspective. The people making daily decisions about what to build, what to delay, and what to abandon are rarely given the financial context to understand what those decisions actually cost. This is not a coincidence. It is a structural condition that most organizations have maintained, quietly and consistently, for roughly two decades.
I believe every person has a perspective worth communicating, and not because the algorithm demands it, but because honest expression contributes to something larger than any one post. It creates resonance. One person’s willingness to say something real gives permission to the next person, and then the next. That’s how movements get built and how communities form. That’s how ideas actually travel.
Most people wing it. They sit down with AI and improvise. That's like walking into a kitchen and tossing random ingredients in a pan. Sometimes it works. Usually it doesn't. Good prep changes the result. The best AI users don't know magic words. They've prepped their ingredients: who they're cooking for, what they're making, how it should taste.
it appears that the model uses functional emotions—patterns of expression and behavior modeled after human emotions, which are driven by underlying abstract representations of emotion concepts. This is not to say that the model has or experiences emotions in the way that a human does. Rather, these representations can play a causal role in shaping model behavior—analogous in some ways to the role emotions play in human behavior—with impacts on task performance and decision-making.
Nothing you own is finished. Everything exists in a state of permanent incompletion, permanently needing. Your phone needs updates, needs charging, needs storage cleared, needs passwords rotated. Your apps need permissions reviewed, terms accepted, preferences re-configured after every update. Your subscriptions need evaluating, need renewing, need canceling, need justifying to yourself every month when the charge appears. The purchase isn't the end of anything. It's the first day of a relationship you didn't agree to, with no clean way out.
The goal of writing is not to have written. It is to have increased your understanding, and then the understanding of those around you. When you are tasked to write something, your job is to go into the murkiness and come out of it with structure and understanding. To conquer the unknown.
The coordination problem does not change. The need for someone to own the outcome does not change. The fragility of interfaces does not change. The cost of getting decisions wrong does not change. Organisations that understand this will use AI to make their teams more effective without assuming they can make them smaller in proportion. They will recognise that a 10-person team producing the output of 30 needs better coordination structures, not fewer coordinators.
I want to pull on a thread that we talked about in the beginning - the three emerging camps of peoples relationships to AI. This sits right at the heart of my own tension right now - I’m trying to stay on the frontier, discovering the patterns that work and those that don’t. At the same time, I’m thinking about my peers, and the impact of these changes on them and on our profession. I feel like I’m losing my ability to even talk to some folks, and it stresses me out.
The plan was to survey all existing caching methods, understand each team’s needs, and then build a single internal product: an adaptive, hybrid cache that would work both in local memory and on Redis, with proper observability, monitoring, and administration tools, and with a set of advanced features that none of the existing approaches could offer. After a few months of work, Alan Cache was born.
ASP.NET Core has traditionally offered two caching options: in-memory caching and distributed caching. Each has its trade-offs. In-memory caching using IMemoryCache is fast but limited to a single server. Distributed caching with IDistributedCache works across multiple servers using a backplane. .NET 9 introduces HybridCache, a new library that combines the best of both approaches. It prevents common caching problems like cache stampede. It also adds useful features like tag-based invalidation and better performance monitoring.
The work is yours if you brought the judgment, the context, the decisions about what to build and what to leave out. The work is yours if you can defend every choice in it. The keystrokes are a delivery mechanism. They always were.