Whenever there is a new film from the master of anarchistic cinema, Yorgos Lanthimos, I must remind myself to bring something to support my jaws into the…
Niko Heikkilä
👋🏻 Hello, traveller! I’m a software craftsperson with a strong passion for making work and life better for software engineers. This blog contains insights related to modern software engineering practices. Read the longer story of me, and if you liked what you read subscribe to my feed.
Latest Articles
Film Review: Poor Things (2023)
January 15, 2024 ☕️ 5 minutes read
Five Essential Pointers for Improving Your Product and Process Quality
October 14, 2023 ☕️ 3 minutes read
One technique of ensuring my work will be remembered is giving back professional pointers on how the client can improve the quality of their product and process…
Clean Frontend Architecture with SvelteKit: Enabling Safe and Continuous Deployments
May 7, 2023 ☕️ 7 minutes read
The goal of every software team is to deliver the solution into their users’ hands sooner than later. In this post, I will explain how to set up a CI/CD…
Clean Frontend Architecture with SvelteKit: Building Confidence with Acceptance Testing
May 3, 2023 ☕️☕️ 8 minutes read
In the previous chapters, you saw how the heart of our architecture — services, gateways, and domain models — were covered with behavioural IO-free tests…
Clean Frontend Architecture with SvelteKit: Server-Side Routes and Components
May 2, 2023 ☕️ 4 minutes read
In the previous chapters, I have demonstrated the power of designing and testing a backend within the frontend, but you can only walk so far. I haven’t touched…
Clean Frontend Architecture with SvelteKit: Domain Modelling
February 28, 2023 ☕️ 5 minutes read
Whether you follow the domain-driven design or not, clean domain modelling is one of the most crucial problems we software engineers must tackle. Why is that…
Clean Frontend Architecture with SvelteKit: Handling the External Dependencies with Gateway
January 31, 2023 ☕️ ☕️ 8 minutes read
In the previous post, I designed our service and use case handlers. However, it had one glaring detail I left unexplained: the gateway. What exactly is a…
Clean Frontend Architecture with SvelteKit: Discovering the Use Cases
January 29, 2023 ☕️☕️ 8 minutes read
The essence of software lies in the problems it helps us to solve. Software that doesn’t offer a solution to the problem is only code for the joy of coding…
Clean Frontend Architecture with SvelteKit: Preface
January 28, 2023 ☕️ 3 minutes read
Long gone in the past are websites that purely displayed static, seldom changing content to visitors. Today, almost all user interfaces are web applications…
A Practical Guide to Micro-Commits
November 5, 2022 ☕️ 4 minutes read
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…
Layman's Guide to Higher-Order Functions
September 27, 2022 ☕️ 4 minutes read
The single most important topic in functional programming is to understand what a function is. Inherently, a function is a way to map the input value of some…
The Definitive List of Things I Don't Know
September 18, 2022 ☕️ 5 minutes read
I often ponder my work and where I want to head with it. Thus, it’s only logical to understand what I need to learn to get there. Moreover, the more I think of…
Test-Driven Development on a Bus Ride to Hell
September 17, 2022 ☕️☕️☕️ 17 minutes read
I’m going to admit something: I had trouble understanding test-driven development (TDD) and it took me a long time to get over it. TDD felt mysterious…
Be Effective, Not Productive
August 22, 2022 ☕️ 2 minutes read
I’ve recently participated in discussions related to developer productivity. I think productivity is harmful because it can fool us into thinking high-frequency…
Use Case Driven Development: How to Write Resilient and Robust Tests
August 20, 2022 ☕️ 5 minutes read
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…
Turning up the Developer Experience to Eleven with Mob Programming
August 8, 2022 ☕️☕️☕️☕️ 18 minutes read
This post was originally published in Futurice blog. Disclaimer: similar to other ways of working, both pair and mob programming are known to elicit heated…
The Essentials of Simple Design
June 27, 2022 ☕️ 1 minute read
Few rules in designing clean code have been as crucial for me as Kent Beck’s four rules of simple design. To jog your memory, they are as follows: Well-designed…
How do you ensure your team receives feedback as fast as possible?
May 8, 2022 ☕️ 2 minutes read
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…
New Computer — Who Dis?
May 7, 2022 ☕️ 2 minutes read
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…
Sanctity of the Slow Web
April 18, 2022 ☕️ 1 minute read
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…
Effortless End-To-End Testing with Microsoft Playwright
April 17, 2022 ☕️☕️ 9 minutes read
Don’t care about reading much, eh? Too bad, but you can also skip the content and head over to my Playwright Kickstarter repository and learn how to use it for…
Five Best Talks from DevTernity 2021
March 12, 2022 ☕️☕️ 8 minutes read
The promise on DevTernity conference homepage is to turn developers into architects and engineering leaders. A bold mission, which many major players in the…
Growing Software Guided by the Living Dead
February 13, 2022 ☕️ 4 minutes read
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…
Uncertainty-Driven Project Development
February 12, 2022 ☕️ 3 minutes read
In the modern world struck by volatility, uncertainty, complexity, and ambiguity we are still pushed to estimate our work accurately. Some say estimating is…
New Release: Publicator
January 30, 2022 ☕️ 2 minutes read
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…
Raising the Bar of Professional Software Development
January 30, 2022 ☕️ 4 minutes read
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…
DevOps Is the Interface, Your Organisation Implements It
January 1, 2022 ☕️ 3 minutes read
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…
Bringing Back the Technical Excellence: Rules of Thumb for Effective Software Lifecycle Management
November 15, 2021 ☕️☕️☕️ 13 minutes read
In software, legacy code is a code that runs in production. Don’t you love the defeatist attitude of this quote? You might have stumbled upon it on many…
Being a Good Developer: Tips for an Effective Code Review
September 11, 2021 ☕️ 6 minutes read
Hey! An earlier revision of this post described how to survive the world of pull request workflows. However, since then, I’ve grown more convinced that…
When to Pair Program and When to Go Solo
May 23, 2021 ☕️☕️ 11 minutes read
I recently finished reading Practical Remote Pair Programming by Adrian Bolboacă. In the description, the author promises to teach you the structure…