56,966 blogs · [ { "id": "01a087b0-1b07-7029-939c-9b357dd9ecc2", "title": "Generating Alt Texts for Images with Claude", "url": "https://nikoheikkila.fi/blog/generating-alt-texts-for-images-with-claude/", "published_at": "2026-08-17T00:00:00+00:00" }, { "id": "01a087b0-1b07-7029-939c-9b357e66c20e", "title": "Healthcheck for You, Developer", "url": "https://nikoheikkila.fi/blog/healthcheck-for-you-developer/", "published_at": "2026-08-15T00:00:00+00:00" }, { "id": "01a087b0-1b07-7029-939c-9b357ed9b401", "title": "Hello, Neovim, My Old Friend", "url": "https://nikoheikkila.fi/blog/hello-neovim-my-old-friend/", "published_at": "2026-08-05T00:00:00+00:00" }, { "id": "01a087b0-1b07-7029-939c-9b357f2682b8", "title": "My Vibe-Coding Workflow", "url": "https://nikoheikkila.fi/blog/my-vibe-coding-workflow/", "published_at": "2026-02-18T00:00:00+00:00" }, { "id": "01a087b0-1b07-7029-939c-9b357f5c3de3", "title": "Craftsperson's Guide to GitHub Actions #3: Building and Releasing", "url": "https://nikoheikkila.fi/blog/craftpersons-guide-to-github-actions/building-and-releasing/", "published_at": "2026-01-08T00:00:00+00:00" }, { "id": "01a087b0-1b07-7029-939c-9b358011f8ba", "title": "Craftsperson's Guide to GitHub Actions #2: Scaling up the Testing", "url": "https://nikoheikkila.fi/blog/craftpersons-guide-to-github-actions/scaling-up-the-testing/", "published_at": "2025-12-10T00:00:00+00:00" }, { "id": "01a087b0-1b07-7029-939c-9b3580c2ce4b", "title": "Craftsperson's Guide to GitHub Actions #1: Designing for Success", "url": "https://nikoheikkila.fi/blog/craftpersons-guide-to-github-actions/designing-for-success/", "published_at": "2025-12-04T00:00:00+00:00" }, { "id": "01a087b0-1b07-7029-939c-9b3580de8a6c", "title": "Craftsperson's Guide to GitHub Actions", "url": "https://nikoheikkila.fi/blog/craftpersons-guide-to-github-actions/", "published_at": "2025-12-03T00:00:00+00:00" }, { "id": "01a087b0-1b07-7029-939c-9b3581854e6a", "title": "Everyday Design", "url": "https://nikoheikkila.fi/blog/everyday-design/", "published_at": "2025-11-25T00:00:00+00:00" }, { "id": "01a087b0-1b07-7029-939c-9b35827e3a3a", "title": "My AI Agents Are All Nuts", "url": "https://nikoheikkila.fi/blog/my-ai-agents-are-all-nuts/", "published_at": "2025-06-10T00:00:00+00:00" }, { "id": "01a087b0-1b07-7029-939c-9b3582f2d7e0", "title": "AI-Augmented Software Development: Hype, Vibes and Smoking Production Environments", "url": "https://nikoheikkila.fi/blog/ai-augmented-software-development-hype-vibes-and-smoking-production-environments/", "published_at": "2025-03-25T00:00:00+00:00" }, { "id": "01a087b0-1b07-7029-939c-9b358369ba6f", "title": "Escaping the Desert: Software Teams Thrive in the Forest", "url": "https://nikoheikkila.fi/blog/escaping-the-desert-software-teams-thrive-in-the-forest/", "published_at": "2025-03-08T00:00:00+00:00" }, { "id": "01a087b0-1b07-7029-939c-9b3583a29ebe", "title": "From Speculation to Facts – Mastering Vertical Slicing in Software Engineering", "url": "https://nikoheikkila.fi/blog/from-speculation-to-facts-mastering-vertical-slicing-in-software-engineering/", "published_at": "2025-03-02T00:00:00+00:00" }, { "id": "01a087b0-1b07-7029-939c-9b358487b433", "title": "Film Review: Poor Things (2023)", "url": "https://nikoheikkila.fi/blog/film-review-poor-things-2023/", "published_at": "2024-01-15T00:00:00+00:00" }, { "id": "01a087b0-1b07-7029-939c-9b35853ac558", "title": "Five Essential Pointers for Improving Your Product and Process Quality", "url": "https://nikoheikkila.fi/blog/five-essential-pointers-for-improving-your-product-and-process-quality/", "published_at": "2023-10-14T00:00:00+00:00" }, { "id": "01a087b0-1b07-7029-939c-9b358579e897", "title": "Clean Frontend Architecture with SvelteKit: Enabling Safe and Continuous Deployments", "url": "https://nikoheikkila.fi/blog/clean-frontend-architecture-with-sveltekit/continuous-deployments/", "published_at": "2023-05-07T00:00:00+00:00" }, { "id": "01a087b0-1b07-7029-939c-9b35858a4a22", "title": "Clean Frontend Architecture with SvelteKit: Building Confidence with Acceptance Testing", "url": "https://nikoheikkila.fi/blog/clean-frontend-architecture-with-sveltekit/acceptance-testing/", "published_at": "2023-05-03T00:00:00+00:00" }, { "id": "01a087b0-1b07-7029-939c-9b3585c0d3bb", "title": "Clean Frontend Architecture with SvelteKit: Server-Side Routes and Components", "url": "https://nikoheikkila.fi/blog/clean-frontend-architecture-with-sveltekit/server-side-routes-and-components/", "published_at": "2023-05-02T00:00:00+00:00" }, { "id": "01a087b0-1b07-7029-939c-9b35863e8d9f", "title": "Clean Frontend Architecture with SvelteKit: Domain Modelling", "url": "https://nikoheikkila.fi/blog/clean-frontend-architecture-with-sveltekit/domain-modelling/", "published_at": "2023-02-28T00:00:00+00:00" }, { "id": "01a087b0-1b07-7029-939c-9b358721058f", "title": "Clean Frontend Architecture with SvelteKit: Handling the External Dependencies with Gateway", "url": "https://nikoheikkila.fi/blog/clean-frontend-architecture-with-sveltekit/handling-the-external-dependencies-with-gateway/", "published_at": "2023-01-31T00:00:00+00:00" }, { "id": "01a087b0-1b07-7029-939c-9b3587226ff3", "title": "Clean Frontend Architecture with SvelteKit: Discovering the Use Cases", "url": "https://nikoheikkila.fi/blog/clean-frontend-architecture-with-sveltekit/discovering-the-use-cases/", "published_at": "2023-01-29T00:00:00+00:00" }, { "id": "01a087b0-1b07-7029-939c-9b35880b6e5a", "title": "Clean Frontend Architecture with SvelteKit: Preface", "url": "https://nikoheikkila.fi/blog/clean-frontend-architecture-with-sveltekit/", "published_at": "2023-01-28T00:00:00+00:00" }, { "id": "01a087b0-1b08-7180-96f4-e5bc1ebbde80", "title": "A Practical Guide to Micro-Commits", "url": "https://nikoheikkila.fi/blog/a-practical-guide-to-micro-commits/", "published_at": "2022-11-05T00:00:00+00:00" }, { "id": "01a087b0-1b08-7180-96f4-e5bc1f673dd4", "title": "Layman's Guide to Higher-Order Functions", "url": "https://nikoheikkila.fi/blog/layman-s-guide-to-higher-order-functions/", "published_at": "2022-09-27T00:00:00+00:00" }, { "id": "01a087b0-1b08-7180-96f4-e5bc1f90bc40", "title": "The Definitive List of Things I Don't Know", "url": "https://nikoheikkila.fi/blog/things-i-don-t-know/", "published_at": "2022-09-18T00:00:00+00:00" }, { "id": "01a087b0-1b08-7180-96f4-e5bc2085c64a", "title": "Test-Driven Development on a Bus Ride to Hell", "url": "https://nikoheikkila.fi/blog/test-driven-development-on-a-bus-ride-to-hell/", "published_at": "2022-09-17T00:00:00+00:00" }, { "id": "01a087b0-1b08-7180-96f4-e5bc21594e91", "title": "Be Effective, Not Productive", "url": "https://nikoheikkila.fi/blog/be-effective-not-productive/", "published_at": "2022-08-22T00:00:00+00:00" }, { "id": "01a087b0-1b08-7180-96f4-e5bc216d23f9", "title": "Use Case Driven Development: How to Write Resilient and Robust Tests", "url": "https://nikoheikkila.fi/blog/use-case-driven-development-how-to-write-resilient-and-robust-tests/", "published_at": "2022-08-20T00:00:00+00:00" }, { "id": "01a087b0-1b08-7180-96f4-e5bc21cfc305", "title": "Turning up the Developer Experience to Eleven with Mob Programming", "url": "https://nikoheikkila.fi/blog/turning-up-the-developer-experience-to-eleven-with-mob-programming/", "published_at": "2022-08-08T00:00:00+00:00" }, { "id": "01a087b0-1b08-7180-96f4-e5bc22bc4a56", "title": "The Essentials of Simple Design", "url": "https://nikoheikkila.fi/blog/the-essentials-of-simple-design/", "published_at": "2022-06-27T00:00:00+00:00" }, { "id": "01a087b0-1b08-7180-96f4-e5bc22e7c81f", "title": "How do you ensure your team receives feedback as fast as possible?", "url": "https://nikoheikkila.fi/blog/how-do-you-ensure-your-team-receives-feedback-as-fast-as-possible/", "published_at": "2022-05-08T00:00:00+00:00" }, { "id": "01a087b0-1b08-7180-96f4-e5bc23ad6ac9", "title": "New Computer — Who Dis?", "url": "https://nikoheikkila.fi/blog/new-computer-who-dis/", "published_at": "2022-05-07T00:00:00+00:00" }, { "id": "01a087b0-1b08-7180-96f4-e5bc23e4da97", "title": "Sanctity of the Slow Web", "url": "https://nikoheikkila.fi/blog/sanctity-of-the-slow-web/", "published_at": "2022-04-18T00:00:00+00:00" }, { "id": "01a087b0-1b08-7180-96f4-e5bc23f295b4", "title": "Effortless End-To-End Testing with Microsoft Playwright", "url": "https://nikoheikkila.fi/blog/effortless-end-to-end-testing-with-microsoft-playwright/", "published_at": "2022-04-17T00:00:00+00:00" }, { "id": "01a087b0-1b08-7180-96f4-e5bc241ca9ea", "title": "Five Best Talks from DevTernity 2021", "url": "https://nikoheikkila.fi/blog/five-best-talks-from-dev-ternity-2021/", "published_at": "2022-03-12T00:00:00+00:00" }, { "id": "01a087b0-1b08-7180-96f4-e5bc2427abb4", "title": "Growing Software Guided by the Living Dead", "url": "https://nikoheikkila.fi/blog/growing-software-guided-by-the-living-dead/", "published_at": "2022-02-13T00:00:00+00:00" }, { "id": "01a087b0-1b08-7180-96f4-e5bc24576c20", "title": "Uncertainty-Driven Project Development", "url": "https://nikoheikkila.fi/blog/uncertainty-driven-project-development/", "published_at": "2022-02-12T00:00:00+00:00" }, { "id": "01a087b0-1b08-7180-96f4-e5bc24be75fc", "title": "Raising the Bar of Professional Software Development", "url": "https://nikoheikkila.fi/blog/raising-the-bar-of-professional-software-development/", "published_at": "2022-01-30T00:00:00+00:00" }, { "id": "01a087b0-1b08-7180-96f4-e5bc25a3fb30", "title": "DevOps Is the Interface, Your Organisation Implements It", "url": "https://nikoheikkila.fi/blog/dev-ops-is-the-interface-your-organisation-implements-it/", "published_at": "2022-01-01T00:00:00+00:00" }, { "id": "01a087b0-1b08-7180-96f4-e5bc2672e4ef", "title": "Bringing Back the Technical Excellence: Rules of Thumb for Effective Software Lifecycle Management", "url": "https://nikoheikkila.fi/blog/bringing-back-the-technical-excellence/", "published_at": "2021-11-15T00:00:00+00:00" }, { "id": "01a087b0-1b08-7180-96f4-e5bc2761237f", "title": "Being a Good Developer: Tips for an Effective Code Review", "url": "https://nikoheikkila.fi/blog/being-a-good-developer-tips-for-an-effective-code-review/", "published_at": "2021-09-11T00:00:00+00:00" }, { "id": "01a087b0-1b08-7180-96f4-e5bc285573bd", "title": "When to Pair Program and When to Go Solo", "url": "https://nikoheikkila.fi/blog/when-to-pair-program-and-when-to-go-solo/", "published_at": "2021-05-23T00:00:00+00:00" }, { "id": "01a087b0-1b08-7180-96f4-e5bc2860ef46", "title": "Health Check Before Jumping to a New Organization", "url": "https://nikoheikkila.fi/blog/health-check-before-jumping-to-a-new-organization/", "published_at": "2021-05-09T00:00:00+00:00" }, { "id": "01a087b0-1b08-7180-96f4-e5bc2956c93a", "title": "You Can't Grow Yourself Unless You Grow Others", "url": "https://nikoheikkila.fi/blog/you-can-t-grow-yourself-unless-you-grow-others/", "published_at": "2021-04-24T00:00:00+00:00" }, { "id": "01a087b0-1b08-7180-96f4-e5bc2981b592", "title": "Reducing the Lead Times with Little's Law", "url": "https://nikoheikkila.fi/blog/reducing-the-lead-times-with-littles-law/", "published_at": "2021-03-28T00:00:00+00:00" }, { "id": "01a087b0-1b08-7180-96f4-e5bc2a374af3", "title": "Blocking Time for Tasks with Toggl", "url": "https://nikoheikkila.fi/blog/blocking-time-for-tasks-with-toggl/", "published_at": "2021-03-20T00:00:00+00:00" }, { "id": "01a087b0-1b08-7180-96f4-e5bc2b3349cc", "title": "The Unsurprising Truth about What Motivates Developers", "url": "https://nikoheikkila.fi/blog/the-unsurprising-truth-about-what-motivates-developers/", "published_at": "2020-10-26T00:00:00+00:00" }, { "id": "01a087b0-1b08-7180-96f4-e5bc2b83683f", "title": "Fight the Inner Impostor with Just-In-Time Learning", "url": "https://nikoheikkila.fi/blog/fight-the-inner-impostor-with-just-in-time-learning/", "published_at": "2020-10-15T00:00:00+00:00" }, { "id": "01a087b0-1b08-7180-96f4-e5bc2ba60ab4", "title": "First Four Weeks at Futurice", "url": "https://nikoheikkila.fi/blog/first-four-weeks-at-futurice/", "published_at": "2020-09-13T00:00:00+00:00" }, { "id": "01a087b0-1b08-7180-96f4-e5bc2c790678", "title": "Kickstarting the Open-Source Culture in Your Company", "url": "https://nikoheikkila.fi/blog/kickstarting-the-open-source-culture-in-your-company/", "published_at": "2020-06-15T00:00:00+00:00" }, { "id": "01a087b0-1b08-7180-96f4-e5bc2c9fdcb9", "title": "Rapid Prototyping with Table-Driven Testing", "url": "https://nikoheikkila.fi/blog/rapid-prototyping-with-table-driven-testing/", "published_at": "2020-03-27T00:00:00+00:00" }, { "id": "01a087b0-1b08-7180-96f4-e5bc2d777f0d", "title": "The Five Ideals of Developer Experience", "url": "https://nikoheikkila.fi/blog/the-five-ideals-of-developer-experience/", "published_at": "2020-01-06T00:00:00+00:00" }, { "id": "01a087b0-1b08-7180-96f4-e5bc2e4f5325", "title": "Checking a Web Page for Dead Links", "url": "https://nikoheikkila.fi/blog/checking-a-web-page-for-dead-links/", "published_at": "2019-11-24T00:00:00+00:00" }, { "id": "01a087b0-1b08-7180-96f4-e5bc2ef42e05", "title": "Death of the Production Line and Factory Workers Attitude", "url": "https://nikoheikkila.fi/blog/death-of-the-production-line-and-factory-workers-attitude/", "published_at": "2019-11-18T00:00:00+00:00" }, { "id": "01a087b0-1b08-7180-96f4-e5bc2f41e01b", "title": "Customizing Your Shell Prompt for Productivity", "url": "https://nikoheikkila.fi/blog/customize-your-shell-prompt-for-productivity/", "published_at": "2019-08-06T00:00:00+00:00" }, { "id": "01a087b0-1b08-7180-96f4-e5bc2fba91e2", "title": "Why I'm Quitting Twitter", "url": "https://nikoheikkila.fi/blog/why-i-m-quitting-twitter/", "published_at": "2019-08-02T00:00:00+00:00" }, { "id": "01a087b0-1b08-7180-96f4-e5bc302e381e", "title": "Generating Conventional Changelogs", "url": "https://nikoheikkila.fi/blog/generating-conventional-changelogs/", "published_at": "2019-05-25T00:00:00+00:00" }, { "id": "01a087b0-1b08-7180-96f4-e5bc306e40c3", "title": "Don't Use Bash for Scripting (All the Time)", "url": "https://nikoheikkila.fi/blog/don-t-use-bash-for-scripting-all-the-time/", "published_at": "2019-05-05T00:00:00+00:00" }, { "id": "01a087b0-1b08-7180-96f4-e5bc30c6775b", "title": "Serving Gatsby Site with Docker Multi-Stage Build", "url": "https://nikoheikkila.fi/blog/docker-gatsby-multi-stage-build/", "published_at": "2019-04-23T00:00:00+00:00" }, { "id": "01a087b0-1b08-7180-96f4-e5bc312c0e36", "title": "Static Site Rendering Conquer All", "url": "https://nikoheikkila.fi/blog/static-site-rendering-conquer-all/", "published_at": "2019-04-19T00:00:00+00:00" }, { "id": "01a087b0-1b08-7180-96f4-e5bc320ebadf", "title": "Quick Tip: Faking Dates in PHP with Carbon", "url": "https://nikoheikkila.fi/blog/quick-tip-faking-dates-in-php-with-carbon/", "published_at": "2018-06-24T00:00:00+00:00" }, { "id": "01a087b0-1b08-7180-96f4-e5bc32f13947", "title": "The (Im)Practical Continuous Delivery", "url": "https://nikoheikkila.fi/blog/the-impractical-continuous-delivery/", "published_at": "2018-04-29T00:00:00+00:00" }, { "id": "01a087b0-1b08-7180-96f4-e5bc334f920a", "title": "Squashing Software Defects with Eisenhower Matrix", "url": "https://nikoheikkila.fi/blog/squashing-software-defects-with-eisenhower-matrix/", "published_at": "2017-12-05T00:00:00+00:00" }, { "id": "01a087b0-1b08-7180-96f4-e5bc33c6262a", "title": "Three Lessons I’ve Learned as a Professional Web Developer", "url": "https://nikoheikkila.fi/blog/three-lessons/", "published_at": "2017-12-03T00:00:00+00:00" }, { "id": "01a087b0-1b08-7180-96f4-e5bc3441de19", "title": "Listin’ It Up: The Musical ABC", "url": "https://nikoheikkila.fi/blog/listin-it-up-the-musical-abc/", "published_at": "2016-05-27T00:00:00+00:00" } ] posts Claim your blog
Back to nikoheikkila.fi
Blog · corpus.blog/blogs/nikoheikkila.fi/posts

nikoheikkila.fi

nikoheikkila.fi

2026

2025

2024

2023

2022

2021

2020

2019

2018

2017

2016