RSSAmplifier

Blog

RSS Feed | Niko Heikkilä

Making work and life better for modern software engineers.

nikoheikkila.fiRSS feed ↗64 posts

Latest posts

Healthcheck for You, Developer

I was watching Scott Tolinski’s insightful video on Syntax about the negative mental health effects developers experience while coding with…

Hello, Neovim, My Old Friend

I’m writing this post with Neovim editor. You probably haven’t heard of it. Or if you’ve ever come close to talking with a software…

My Vibe-Coding Workflow

Ha, got you there, did I? For once, the title of my blog post intentionally deceives you. Well, as a matter of fact I do have a vibe-coding…

Craftsperson's Guide to GitHub Actions #3: Building and Releasing

Originally published on Polar Squad blog. In the previous chapter, we gained confidence through comprehensive testing, including unit tests…

Craftsperson's Guide to GitHub Actions #2: Scaling up the Testing

Originally published on Polar Squad blog. In the previous post, we improved the design of our GitHub Action to make it testable. But having…

Craftsperson's Guide to GitHub Actions #1: Designing for Success

Originally published on Polar Squad blog. Like many other types of scripts, GitHub Actions suffer from a common problem: it’s tempting to…

Craftsperson's Guide to GitHub Actions

Originally published on Polar Squad blog. Have you ever rushed to push a GitHub Action, only to watch it fail in the pipeline? Or inherited…

Everyday Design

I’m going to show you two code snippets that solve the same problem of comparing two inputs. One takes ten lines. The other takes seventy…

My AI Agents Are All Nuts

Thomas Ptacek published this article in the Fly.io company blog. You might ask why such a one-sided and belittling rant with plenty of toxic…

AI-Augmented Software Development: Hype, Vibes and Smoking Production Environments

Originally published on Polar Squad blog Generative AI tools have changed how we developers approach our daily work. Today, headlines tout…

Escaping the Desert: Software Teams Thrive in the Forest

Some years ago, I noticed I had grown increasingly frustrated with the modern trends in the software engineering field. People I had worked…

From Speculation to Facts – Mastering Vertical Slicing in Software Engineering

Benefits of Small Batches and Vertical Slicing When capturing and writing down the work we need to do, we often add it to our designated…

Film Review: Poor Things (2023)

Whenever there is a new film from the master of anarchistic cinema, Yorgos Lanthimos, I must remind myself to bring something to support my…

Five Essential Pointers for Improving Your Product and Process Quality

One technique of ensuring my work will be remembered is giving back professional pointers on how the client can improve the quality of their…

Clean Frontend Architecture with SvelteKit: Enabling Safe and Continuous Deployments

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…

Clean Frontend Architecture with SvelteKit: Building Confidence with Acceptance Testing

In the previous chapters, you saw how the heart of our architecture — services, gateways, and domain models — were covered with behavioural…

Clean Frontend Architecture with SvelteKit: Server-Side Routes and Components

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…

Clean Frontend Architecture with SvelteKit: Domain Modelling

Whether you follow the domain-driven design or not, clean domain modelling is one of the most crucial problems we software engineers must…

Clean Frontend Architecture with SvelteKit: Handling the External Dependencies with Gateway

In the previous post, I designed our service and use case handlers. However, it had one glaring detail I left unexplained: the gateway. What…

Clean Frontend Architecture with SvelteKit: Discovering the Use Cases

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…

Clean Frontend Architecture with SvelteKit: Preface

Long gone in the past are websites that purely displayed static, seldom changing content to visitors. Today, almost all user interfaces are…

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…

Layman's Guide to Higher-Order Functions

The single most important topic in functional programming is to understand what a function is. Inherently, a function is a way to map the…

The Definitive List of Things I Don't Know

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…

Test-Driven Development on a Bus Ride to Hell

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…

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…

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…

Turning up the Developer Experience to Eleven with Mob Programming

This post was originally published in Futurice blog. Disclaimer: similar to other ways of working, both pair and mob programming are known…

The Essentials of Simple Design

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…

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

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…

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…

Sanctity of the Slow Web

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…

Effortless End-To-End Testing with Microsoft Playwright

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…

Five Best Talks from DevTernity 2021

The promise on DevTernity conference homepage is to turn developers into architects and engineering leaders. A bold mission, which many…

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…

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…

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…

DevOps Is the Interface, Your Organisation Implements It

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…

Bringing Back the Technical Excellence: Rules of Thumb for Effective Software Lifecycle Management

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…

Being a Good Developer: Tips for an Effective Code Review

Hey! An earlier revision of this post described how to survive the world of pull request workflows. However, since then, I’ve grown more…

When to Pair Program and When to Go Solo

I recently finished reading Practical Remote Pair Programming by Adrian Bolboacă. In the description, the author promises to teach you the…

Health Check Before Jumping to a New Organization

Many software developers who have at least a couple of years of experience in this industry are often barraged with headhunting letters from…

You Can't Grow Yourself Unless You Grow Others

During our careers, almost everyone has regular one-on-one meetings, sometimes referred to as performance reviews. There we take time to go…

Reducing the Lead Times with Little's Law

There’s a fascinating law of mathematical theory applicable to agile software development, which helps you deliver features faster without…

Blocking Time for Tasks with Toggl

For people doing mainly project work, planning daily tasks is a constant struggle, which can cause severe issues with productivity and…

The Unsurprising Truth about What Motivates Developers

Throughout the observed history, human motivation has adapted to demands and economies of the current age. The first establishment…

Fight the Inner Impostor with Just-In-Time Learning

This post might come off like a weird spiritual tip for a developer, but bear with me a minute… Santosha A word I came across in yoga that…

First Four Weeks at Futurice

Earlier in the summer of 2020, I made a bold decision to refresh and broaden my career from a product company to software consultancy. I was…

Kickstarting the Open-Source Culture in Your Company

By the 2020s, every software company in existence should be using open-source code as building blocks for their products. Better than that…

Rapid Prototyping with Table-Driven Testing

Developers often need to work with something from scratch. Usually, it’s a couple of lines of code whose suitability to real business logic…