Niko Heikkilä

Software Craftsman and Extreme Programmer. Currently shipping quality code at Futurice. Building proprietary software for a living and loving it as much as free and open-source software. Linux, Windows, and macOS user. Follow this blog for insights on TDD, BDD, DDD, mob programming, technical agility, lean software development, continuous integration, and delivery.

For shorter posts, check my account on Mastodon.
November 8, 2022

Clear Writing Indicates Clear Thinking

This week I found out that a developer decided to apply to Futurice using this charming message: “"I follow Niko Heikkilä on LinkedIn, and I appreciate his social media presence, tone and content. So, I'm here."” Well, you know who you are, so thank you for that! It's one of the greatest compliments a software engineer can receive when...
Read more
November 7, 2022

Git Flow Is A Bad Idea

Imagine a hypothetical scenario where a customer walks into a store, and the following discussion takes place. “Customer: "Hi! I'd like to buy the <product>." Clerk: "Mmm, sure thing, but you have to give me two weeks and we'll ship it to you when our next delivery is due." Customer: "But there's at least ten same products on that shel...
Read more
October 21, 2022

When in doubt, be boring.

So, you have found a new shining toy — a cloud development toolkit, state management library, REST framework, or even a new language paradigm — and you're enthusiastic about learning it. Someone on Reddit claimed it would solve all the past problems you've ever had. Great! By all means, assess it in a personal side project. On the othe...
Read more
October 9, 2022

Moving over to Fosstodon

A long-running Mastodon instance (, of which I was a member from 2018 to this day, has decided to shut itself down. Hence, I migrated my account to Fosstodon, which seemed the next best thing. It also got me thinking again about how perishable online services are. Especially those unthankfully maintained by a single...
Read more
October 8, 2022

V for Vulnerability

Effective teams are made stronger by nurturing safe environments where people can become vulnerable. No vulnerability, no psychological safety. No psychological safety, no experimentation of new ideas. No new experiments, no continuous improvement. No continuous improvement, no mastery. No mastery, no purpose, nor motivation. No motiva...
Read more
August 28, 2022

Be Effective, Not Productive

I've recently participated in discussions related to developer productivity. I think productivity is harmful because it can fool us into thinking high-frequency outputs are more desirable than high-quality outcomes. Productive developers may write 500 or more lines to a feature branch in hours, open pull requests for reviewing the chan...
Read more
August 20, 2022

Use Case Driven Development: How to Write Resilient and Robust Tests

Recently, I had a discussion with my team regarding an always timely question: at what level should I write my automated tests: unit, integration, or end-to-end? My initial advice has been to follow the Practical Test Pyramid, which dictates that you should write mostly unit tests, fewer integration tests, and least of all, end-to-end ...
Read more
August 10, 2022

Mob Programming – key issues it can solve, benefits, and learnings

My team and I have been practising mob programming daily for six months. During this time, we have grown from three individual specialists to a team of four full-stack developers and learned to overcome the myriad of challenges presented by our client's business domain. I wrote about our adventures, learnings, and obstacles in mob prog...
Read more
July 27, 2022

A Practical Guide to Micro-Commits

In software development, there's a lot of talk about small vs big batches. However, that talk mostly comes from the Lean methodologies perspective, which, while essential to learn, is not digestible for all. How do you practice small batches — micro-commits — as part of your daily workflow? Let me show you. “If you'd rather skip straig...
Read more
June 27, 2022

The Essentials of Simple Design

Few rules in designing clean code have been as crucial for me as Kent Beck'sfour rules of simple design. To jog your memory, they are as follows: Well-designed code… • passes the tests • reveals intention • has no duplication • contains the fewest elements How do I use them? First and foremost, I need to get to a state where my code is...
Read more
May 27, 2022

Raising the Bar of Professional Software Development

Recently, on LinkedIn, I shared my unapologetic opinion that you're not a professional software developer if you don't care to write automated tests to verify your code. Some people took this into their hearts and decided to call me out as a gatekeeper, actively seeking to harm the industry. Remember that I said nothing about fresh dev...
Read more
May 8, 2022

How do you ensure your team receives feedback as fast as possible?

It happened once upon a time, during the code review… Developer:"Hey, could you review my PR? I had this fantastic idea about X the other day, so I decided to give it a go. I think it turned out to be pretty good. What do you think?" Reviewer:"Ehm, but that's not what we had planned. Did you design this by yourself? Did you stop and th...
Read more
May 7, 2022

New Computer — Who Dis?

There is one thing uniting the people working in tech. Computers. Fresh from the box, many of them are happily unequipped to fulfil our grand visions and desires. Whether it be the ecological disaster caused by chasing after fancy new hardware, receiving authorized devices for client work, or switching laptops due to expiring leases, w...
Read more
April 18, 2022

Sanctity of the Slow Web

During a mentoring session, I was recently asked for tips on how to keep up with the tech world. There are too many places to mention, but I'll list a few here: GitHub Explore can offer you many suggested packages based on the GitHub repositories you've browsed. The algorithm works surprisingly well and learns about your habits to impr...
Read more
March 12, 2022

Five Best Talks from DevTernity 2021

The promise on DevTernity 2021 homepage is to turn developers into architects and engineering leaders. A bold mission, which many major players in the thought leadership business would find a formidable challenge to overcome. Then again, they advertise to be in the top 3 among international software development conferences, so perhaps ...
Read more
February 13, 2022

Growing Software Guided by the Living Dead

While dipping our toes with test-driven development for the first time, a significant obstacle is usually finding out how to write our first tests. Happy cases are easy to start with, but a better way involves mapping your inputs to expected outputs—watch out, ZOMBIES! No, I mean for real. ZOMBIES testing pattern was introduced by Jame...
Read more
February 12, 2022

Uncertainty-Driven Project Development

In the modern world struck by volatility, uncertainty, complexity, and ambiguity we are still pushed to estimate our work accurately. Some say estimating is stressful and counter-productive. Some say it's essential for tracking the team's progress. There is an alternative parallel universe way of working, forcing you to refine and spli...
Read more
January 30, 2022

New Release – Publicator

Lately, I've been investing more time in Python projects. However, having worked with Node.js and TypeScript for the better part of the last few years, I instantly began to miss the comforts provided by the Node ecosystem, namely the fantastic Yarn package manager. Python ecosystem has had its fair share of package management solutions...
Read more
January 1, 2022

DevOps Is the Interface, Your Organisation Implements It

Once upon a time, two software companies were competing in the same business domain. The first one has been out of business for a while now. The latter one thrives. Long Time Ago in a Software Company, Far Far Away... The product management learns about a speculative need for the Feature that will help the company increase their cash f...
Read more
December 6, 2021

Craftsman's Log – 2021.12.06

Wishing you a merry winter solstice and related celebrations in your local culture! Today we Finns also celebrate our 104th year of independence. While I'm not the one to spread nationalist chants, I'm fortunate to live in a country that has enabled me to grow professionally in a multi-cultural environment. Next Friday, I will be atten...
Read more
November 7, 2021

Craftsman's Log – 2021.11.07

Oh, hi! How is your November going? 🍂 Lately, I've been busy moving from one project to another. I've recently finished a short consulting gig where I helped my team build a cloud-based publishing platform using AWS Cloud Development Kit. I will write more of my experiences with CDK to my blog at a later date. I updated my blog to Gats...
Read more
September 21, 2021

Mobbing Without Programming

This week we had some leisure time with my Futurice team playing escape room games. Surprisingly, I enjoyed not participating in the play but observing how we solved the different puzzles together. This led me to a revelation: what I saw was us doing swarming/mobbing with a WIP limit of 1, which is a recommended workflow in nearly all ...
Read more
September 5, 2021

Craftsman's Log – 2021.09.05

Oh, hi! How is your September going? I've been reading again. I'm drafting this post with the Day One app, which I migrated to from Notion. I also tried Emacs' Org Mode for bullet journaling, but simplicity always wins. The Human Side of Elixir I've been studying Elixir programming language and its tooling occasionally, but somehow I n...
Read more
August 9, 2021

Craftsman's Log - 2021.08.09

Hello, reader! 👋 For the last few weeks, I've been recovering from surgery. Fortunately, it hasn't limited my daily life that much. The operation itself was short and affordable because my employer's health insurance entirely covered it. Healthcare is what matters most should I feel the need to relocate to some other country. As is the...
Read more
July 19, 2021

Craftsman's Log - 2021.07.19

It seems that the summer heatwaves have paused so I can once again focus on writing. So here are a couple of good picks I've read and watched while lying in a hammock drinking mineral water. 😎 The fabulous Mob Mentality Show ran a short episode about using mob programming in interviews. It turns out this approach has been familiar to m...
Read more
June 27, 2021

Craftsman's Log - 2021.06.27

I'm writing this just before leaving on a vacation trip. Expect one or more entries during July, though! I started reading the new Dave Farley book, Continous Delivery Pipelines. Remembering how much I liked the Continuous Delivery book, it's likely I'll reference some nuggets of wisdom from this one in later posts. I was nodding hard ...
Read more
June 20, 2021

Craftsman's Log – 2021.06.20

Just in time for summer vacations, I got my summer vaccination this week, and the second shot will be in September. Soon, I'm a free man and free to lick the pavements again — which I probably shouldn't do. I watched through Ragnarok season 2 from Netflix. It wasn't as strong as the first season, mainly due to the series attempting to ...
Read more
May 30, 2021

Craftsman's Log – 2021.05.30

This week, I started recording my overall mood with the Daylio app. It's delightfully simple to use and reminds you that even bad days can be rare, even if you generally feel low. Best mindfulness. I finished the Practical Remote Pair Programming book—more about the benefits and pitfalls of pairing in my blog. Marty Cagan hits the spot...
Read more
April 25, 2021

Craftsman's Log - 2021.04.25

My current employer (Futurice) has begun hiring people from everywhere (in Finland). Check out our open positions, and join us. I'm happy to give more details about our culture and ways of working. I wrote several paragraphs about mentoring, why we need it, and how to excel in it. Related to mentoring, I received this helpful analogy b...
Read more
March 31, 2021

Craftsman's Log – 2021.03.31

I participated in The Principal Developer Masterclass training, which sparked me to write a bit about Little's Law and its impact on agile software delivery. Read the post for tips on reducing the work in progress and increasing your team's throughput. I also received a few pull requests to fix slight factual errors in my post, which r...
Read more

See more posts »