Niko Heikkilä
Software Craftsman and Extreme Programmer. Ambassador in all things Agile and DevOps. Working in the intersection of people and tech. Prominent in solving problems by eliminating process waste and amplifying how people work together.
- Reposted by Niko Heikkilä"Wow! Claude agents built a working C compiler in Rust in just 2 weeks!" Sure they did. And it totally works.
- Reposted by Niko HeikkiläOh, the 90s.
- Reposted by Niko HeikkiläWhen you've been parachuted in to lead a troubled dev organisation, a classic mistake is to open with highly-visible changes. I've seen so many times how it's actually small changes - almost invisible outside dev teams - that can have the biggest leverage. codemanship.wordpress.com/2026/02/04/t...
- Reposted by Niko HeikkiläOne day the industry will recognize the drawbacks of AI agents and nondeterministic automation, and rediscover the UNIX philosophy of chaining together small purpose built tools in a low cost and predictable way, otherwise known as shell scripts.
- Reposted by Niko HeikkiläSeeing more and more posts from engineering leaders along the lines of "Tried Claude Code over the Xmas holiday and generated 10 squillion lines of code (that almost worked) in 10 minutes. Now mandating all our engineers use it as much as possible. Because I don't understand bottlenecks."
- Reposted by Niko HeikkiläI regularly see folks hailing the end of the need to read code. If I presented you with a bowl of candy and told you 1% had broken glass in them, what % would you check before giving them to your kids? The need to understand code isn't going anywhere. codemanship.wordpress.com/2026/01/29/w...
- Reposted by Niko Heikkiläexperienced engineers: one change, test, one change, test junior engineers: batch everything because they're in a hurry this is exactly backwards the person least capable of batching is the one most likely to batch
- Reposted by Niko Heikkilä
- Reposted by Niko HeikkiläHaving in mind that incremental development - to the size of steps present in XP - never became mainstream in our industry, it's not really surprising that not many folks see the problem with the level of waterfall-ing involved in Spec-Driven development.
- Reposted by Niko Heikkilä> “It will be like kubernetes, but for agents,” I said. This is quite possibly the most cursed sentence I've read all day, and I've been reading up on the Greenland crisis so, y'know, that's an honest-to-god accomplishment. From steve-yegge.medium.com/welcome-to-g...
- Reposted by Niko HeikkiläMost of the evidence about AI "speeding up" development is coming from folks doing individual, toy projects they had on their to-do list. Throw it into a whole team, or even worse org, and let me know how it plays out with a reinforcing feedback loop driven by >>
- Reposted by Niko HeikkiläThere's something deeply ironic in incentivizing/mandating people to work in isolation (individually) on features, only to bring them together when there's an incident in production as a result of working in isolation.
- I'm concluding my GitHub Actions blog post series with a thorough look on building and releasing them in a delivery pipeline. Once you've grasped the design and testing aspects, this is exactly as essential in delivering quality work to the hands of users. polarsquad.com/blog/craftsp...
- Reposted by Niko HeikkiläI hope you all like my proposal for fixing the language around mocks and fakes - new video youtu.be/RvKPOjlQKyM with companion blog post coding-is-like-cooking.info/2026/01/we-n...
- Reposted by Niko HeikkiläA recurring “AI” evangelist tactic is using it for tasks that were already solved by tech that is more deterministic, faster, and uses less energy, but has been downgraded or de-emphasised in recent years by software companies Like, we genuinely used to have better search and spellcheck.
- Reposted by Niko HeikkiläIt's worrying how many don't know the difference between Continuous Integration, Continuous Delivery and Continuous Deployment. Continuous Deployment means that software is deployed whenever it's fit to be deployed - on every green build.
- Reposted by Niko HeikkiläSomething to take into 2026: there's no credible evidence of *anybody* being "left behind" by "AI"-assisted coding. Don't buy the FOMO. Wanna use these tools? That's your choice. It won't 10x you. Or 5x you. Or even 2x you. It may well 0.8x you, though, if you lose that engineering discipline.
- Reposted by Niko HeikkiläSalesforce in the summer: "AI is doing 50% of the work at Salesforce" Salesforce now: "AI? I don't know her"
- Reposted by Niko HeikkiläLet's talk about AI Hype and the Theory of Constraints. From a business perspective, the key metric is "lead time." The time it takes to get an idea to the point where it's producing revenue ("in the customer's hands"). 1/10
- Reposted by Niko HeikkiläAlso on "well isn't *spell checking* AI???" smug arguments: Every spell checker on every software I use to write has gotten worse and stupid as more and more ML features have been added. It literally cannot do better than a simple strict check for words not in a dictionary.
- Reposted by Niko HeikkiläThe paradox of our times: everybody in software talks about how “AI” ramps up productivity by an order of magnitude Meanwhile the software I follow, the platforms I keep track of, and the releases I follow keep the same pace as before except buggier, less usable, and more prone to catastrophe
- Reposted by Niko Heikkilä"I Built a Production-Ready App Using AI, and You Can Inspect the Entire Repo" * inspects repo * Me: "I couldn't find the tests. Are they in a separate repo?" Them: "Folks can run whatever tests they want." Er. Okay. When you said "production-ready"..?
- Reposted by Niko HeikkiläWhen we look beyond these sensational "flying saucer reports", we see no AI-generated Spotify or Salesforce or SAP. No LLM-generated games bothering the charts. No noticeable uptick in new products being added to the app stores. So, where is everybody? codemanship.wordpress.com/2025/12/14/t...
- Sick of push and pray? Try the DevOps way. That is, shift the testing of your GitHub Actions as left as possible. I'll tell you how in my latest blog post where you learn about property-based testing and mutation testing. polarsquad.com/blog/craftsp...
- As the influx of new (agentic) text editing tools shows no signs of slowing down, one should remain calm and remind themselves of the following three laws of tools:
- 1. A tool is only as effective as its user, and never wiser 2. Understanding fundamental principles trumps all tools 3. If you identify as a tool user, you're a tool yourself
- Thus, I'll let you sip whatever nanobanana-antigravity-codex-cursor marchitecture you so fervently foam about. I hold no grudge against these tools, mind you, but give me one compelling reason to chase and learn every new tool instead of learning one when the time is right.
- Reposted by Niko Heikkilä🧵 As we figure out what role LLMs and Gen AI systems will play in developing software, I await with interest actual experience reports, such as this one: (> next)
- Reposted by Niko HeikkiläProgrammers will debate endlessly the correctness of code implementing a “taser my genitals” button, its accessibility, and how to place it on the screen to minimise accidental activation, without ever pausing to ask whether frying the end-user’s balls is a good design or not
- Reposted by Niko HeikkiläI am really enjoying having some time between contracts at the moment... I just wrote an article about the test desiderata - this has been on my mind to write about for several years at this point! coding-is-like-cooking.info/2025/12/test...
- Reposted by Niko HeikkiläTIL about a memorial ceremony in Iceland in 2019 to mark the end of a glacier, changing the place name from Okjökull to Ok (jökull = glacier). Uncompromising wording on the bronze plaque: "This is to acknowledge that we know what is happening and what needs to be done. Only you know if we did it".
- Next in my GitHub Actions series, I focus on turning testability smells to testability aids with a simple trick. If you're accustomed to copying code examples from tutorials (or accepting LLM outputs at face value) and pondering how to test them, this post is for you. polarsquad.com/blog/craftsp...
- I'm starting a three-part blog series over at Polar Squad about designing, building, and releasing Typescript-based GitHub Actions with high quality. Here's a teaser that'll make you itch, the first post about critical design considerations is out soon. polarsquad.com/blog/craftsp...
- My Apple Watch tracks my standing hours and notifies me when I should stand up for a while. Just now it congratulated me for standing up and moving while I was sitting.
- This happened because it apparently cannot understand when I'm actually on my feet, but noticed that my wrist was pointed directly to the floor, which fooled the device. Thus, I have learned an easy way to achieve the target standing hours simply by sitting down.
- What a delicious analogue to product team metrics. Tell me how you measure me, and I tell you how I behave.
- Reposted by Niko HeikkiläScott Galloway a decade ago: "In the 60s our brightest minds put us on the Moon, now they're in Silicon Valley trying to optimize ad visibility to get you to maybe buy a car you have no interest in." And we don't think about this as often as we should.
- RIP Mikko Holmström. youtu.be/dNcqnvlSrEw?...
- Reposted by Niko HeikkiläI luuurve my automated refactorings, which is why I'm @jetbrains.com across the board. But when I'm working in Python or JS, I'm forced to do some by hand. 2 in particular I do often when I'm separating concerns. Here's a little guide to how I tackle them codemanship.wordpress.com/2025/11/27/m...
- Do trivial problems in software require modular solutions, or are we overengineering? Recently, I had a task of transforming a composite GitHub Action — essentially a shell script — to a complete TypeScript action even though it only interacted with the GitHub REST API using a single endpoint call.
- Why go this far? The solution was seemingly stable enough, so we likely need not edit it more than a couple of times.
- Yet, devil is in the details. While implementing the action logic, we also needed to take care of input validation, parsing data from URLs, and ensuring proper error handling with informative messages to name but a few.
-
View full threadP.S. I have a blog post series coming up in the Polar Squad blog introducing how to design and develop GitHub Actions with maintainability in mind. Stay tuned!
- Discussing with several software developers over the past few months has led me to believe that crafting high-quality designs is not as easy as it seems. Thus, I wrote a blog post attempting to tap into this specific challenge and how to overcome it. nikoheikkila.fi/blog/everyda...
- In essence, it's yet another take on test-driven development and Clean Architecture without mentioning the names. Now that I mentioned them, I expect people to tell me how they don't work in the real world. Oh, well…
- "Our newest model, <name>, is available today. It’s intelligent, efficient, and the best model in the world for coding, agents, and computer use." Sure, but can it write decent automated tests, and iteratively refactor towards the simplest design? I thought as much.
- Reposted by Niko HeikkiläModularity is the key to fast feedback cycles, short delivery lead times, reliable products and a sustainable pace of innovation. Apart from that, it's not very important, really. codemanship.wordpress.com/2025/11/20/m...
- Reposted by Niko HeikkiläWhen I introduce mutation testing to teams on the Code Craft training workshop, it's invariably one of those "How did this not occur to us before?" moments. "Is our code broken and we don't know it?" Let's break it and see if any of your tests fail.
- The upside of hosting one's DNS and web projects in CloudFlare is that when they go down, everyone barely notices a couple of sites missing because half of the Internet is also down.
- Reposted by Niko HeikkiläThe finale of the great TV comedy show Blackadder goes Forth. Back then I didn't expect one of the funniest programmes ever to end with a scene that makes me cry every time I see it. Every single time.
- Netlify is worsening its pricing model by replacing build minutes with credits. Soon, each production deployment will cost me 15 credits, allowing for only 20 deployments per month.
- I'm uncertain whether my account will remain on a legacy plan or be transferred to the new pricing model, and when this transition is expected to occur. As a result, I'm looking into alternative hosting solutions for my personal website and side projects.
- Today, I attempted to build my static site using Cloudflare Pages, but the build runner was unable to execute a simple 'npm install' command to install dependencies. From the dashboard, I could only configure the build command, which isn't very helpful if the project isn't installed.
-
View full threadCan you imagine if this kind of experiment had been conducted in a real enterprise setting, with extensive planning, procurement, and a commitment to the new platform, rather than rapid experimentation? Shivers.
- I have a strange little pastime activity as a coroner, where I go through some of my old hobby projects that have been gathering dust for months or years, and nurse them back to health. Well, being a coroner is an exaggeration since they haven't really died ever. Every time I note the same pattern:
- – The command interface is immediately familiar because I use a similar Makefile or Taskfile everywhere. – Apps start without issues after cloning and installing the dependencies. – Tests pass, and they are both fast and stable. – Commit history is atomic, focused and understandable.
- – I recall little about the reasoning behind a particular technical decision, but reading the code is swift, and I can start writing new features instantly. – The delivery pipeline validates the changes I push to the main branch, or fails for the right reasons.
-
View full threadThe grandiose philosophy here is no more complex than the fact that commitment to technical excellence creates a long-standing developer experience. Print that into your T-shirts or mugs.
- Reposted by Niko HeikkiläOne piece of common wisdom that I've come to disagree with is "do the most complicated thing first." In a waterfall world, that's a risk-reduction strategy, but in an incremental development context, it's actually the opposite. 1/7
- This is a good read. The sick cult of velocity burns out minds and ends careers at worst. Professionalism is about being slow when the time calls for it and accelerating thoughtfully. "The world doesn’t need faster engineers. It needs steadier ones" russmiles.substack.com/p/in-praise-...
- Skip tonight's movie and read this if your management is shoving LLM usage on your team.
- Re-reading The AI-Ready Software Developer posts in a single sitting - which I should have done sooner (but the broken links are fixed now) - took me about 90 minutes. There's a chunk of a book here. codemanship.wordpress.com/2025/10/30/t...
- Pull Requests are mandatory here.
- Write your developer horror story in 5 words or less. 🎃 We'll go first: Remote code execution. github.blog/open-source/inside-…
- Reposted by Niko Heikkilä...because organisations aren't bundles of individuals, but systems. And as @jasongorman.bsky.social points out, if you add a "fire-hose to your plumbing", and your plumbing has lots of bottlenecks, it might not go all that well.
- Reposted by Niko HeikkiläWhen folks talk about their "AI-assisted" dev process, it's very useful to see the resulting code so I can calibrate my understanding of what they mean by "good".
- Reposted by Niko HeikkiläThings that not every product needs: - push notifications - chat - a perky AI assistant Jus’ sayin
- "Gamers talk about 'saving their game'. If you save your game (at least before a boss fight) you can gracefully return to your healthy pre-battle state. It’s the same with software." — @agile-otter.bsky.social www.industriallogic.com/blog/save-yo...
- Today, like many other days, I noticed I have way too many changes uncommitted, and I didn't even want to commit those. Running `git reset --hard` was liberating. Start anew from clean slate equipped with better understanding about the problem.
- Reposted by Niko HeikkiläIf we're having a debate, and at any point you say, "let's ask ChatGPT", then you lose by default.
- Only when used properly, which does not mean writing imperative script logic inside functions. The same goes for OOP, naturally.
- Reposted by Niko HeikkiläPeople think software development is about writing code. It is not! It is about: Communication Collaboration Simplicity Courage Respect -- XP Values, @kentbeck.com @jamesshore.bsky.social #agilecam
- When will @bsky.app start supporting passkeys as MFA solution instead of emailing me login codes?@support.bsky.team
- I'm seeing a wave after another of people migrating away from Vercel. What a meltdown for a tech company, although there must be a tiny wave of right-wing nuts subscribing for support. I migrated to Netlify years ago for better developer experience. I haven't regretted that decision.
- I've seen many large organisations building critical apps with Next.js. I've helped them in the past as well. I wonder what happens when people who developed those apps refuse to work and demand a rewrite. Sounds like you cannot cover your ears and pretend tech is isolated from politics.
- Reposted by Niko Heikkilä"Teams that care about quality will take the time to understand LLM-generated code before it makes it into the repo. But some teams are checking in code nobody’s read, and that’s only been cursorily tested. And, evidently, there’s a lot of them." codemanship.wordpress.com/2025/09/30/c...