Niko Heikkilä
banner
nikoheikkila.fi
Niko Heikkilä
@nikoheikkila.fi
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.
Pinned
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...
Craftsperson's Guide to GitHub Actions — Polar Squad
Learn to build production-ready GitHub Actions with clean architecture, comprehensive testing strategies, and reliable release pipelines, transforming fragile automation scripts into maintainable soft...
polarsquad.com
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"..?
December 15, 2025 at 11:21 AM
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...
The Gorman Paradox: Where Are All The AI-Generated Apps?
In 1950, while discussing the recent wave of flying saucer reports over lunch with colleagues at Los Alamos National Laboratory in New Mexico, physicist Enrico Fermi asked a simple question. There …
codemanship.wordpress.com
December 14, 2025 at 9:02 AM
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...
Craftsperson's Guide to GitHub Actions #2: Scaling Up the Testing — Polar Squad
Move beyond basic unit tests with property-based testing to discover hidden edge cases and mutation testing to verify your tests actually work. Learn how to achieve genuine confidence in your GitHub A...
polarsquad.com
December 12, 2025 at 1:33 PM
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:
December 9, 2025 at 5:43 PM
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)
December 9, 2025 at 2:51 PM
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
December 9, 2025 at 3:32 PM
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...
Test Desiderata 2.0 - Coding Is Like Cooking
Kent Beck is one of the original authors of JUnit, an open source tool that kick-started a huge shift in programmer behaviour that I and others have found immensely valuable. In 2019 he published his ...
coding-is-like-cooking.info
December 8, 2025 at 1:47 PM
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".
December 7, 2025 at 5:17 PM
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...
Craftsperson's Guide to GitHub Actions #1: Designing for Success — Polar Squad
Discover how to design testable GitHub Actions by avoiding common pitfalls like implicit dependencies and global state. Learn to separate business logic from infrastructure using dependency injection ...
polarsquad.com
December 5, 2025 at 7:20 AM
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...
Craftsperson's Guide to GitHub Actions — Polar Squad
Learn to build production-ready GitHub Actions with clean architecture, comprehensive testing strategies, and reliable release pipelines, transforming fragile automation scripts into maintainable soft...
polarsquad.com
December 4, 2025 at 6:14 AM
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.
December 3, 2025 at 3:16 PM
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.
November 29, 2025 at 9:18 AM
RIP Mikko Holmström.

youtu.be/dNcqnvlSrEw?...
Pojat: Pasi Virtanen (live 1992)
YouTube video by makikoti47
youtu.be
November 29, 2025 at 9:56 AM
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...
Manual Refactoring: Python – Introduce Parameter Object & Move Instance Method
Two refactorings I can’t live without are Introduce Parameter Object and Move Instance Method. I often find myself introducing new classes to separate concerns using them in a little dance I …
codemanship.wordpress.com
November 27, 2025 at 9:44 AM
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.
November 26, 2025 at 7:56 AM
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...
Everyday Design
Why do most developers struggle while changing code? The answer lies in how we think about software design. Learn how focusing on behavioural thinking can elevate your code quality.
nikoheikkila.fi
November 25, 2025 at 8:08 PM
"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.
November 24, 2025 at 7:46 PM
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...
Modular Design: The Secret Sauce
In pretty much every Codemanship training course, I try to stress the fundamental importance of modular design in software development. When we fail to separate the different concerns in our design…
codemanship.wordpress.com
November 20, 2025 at 6:52 AM
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.
November 19, 2025 at 7:03 PM
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.
November 18, 2025 at 3:34 PM
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.
November 11, 2025 at 12:33 PM
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.
November 10, 2025 at 7:04 PM
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:
November 7, 2025 at 5:03 PM
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
November 2, 2025 at 4:58 PM
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-...
In Praise of Slow Software Engineering
How to be a better software developer by focussing on the right tempo, not speed
russmiles.substack.com
November 2, 2025 at 5:02 PM