Disclaimer: This is where I shout my thoughts and opinions.

Modern testing - Test more and better with less friction (Talk @ JavaZone 2024)

Test more and better with less friction is a talk I did @ JavaZone 2024, all about reducing friction in our automated tests.

John Mikael Lindbakk - 2024-09-01

Read more

Interface hell: The Interface Segregation Principle doesn't mean 'Add interfaces everywhere'

Most developers are aware of SOLID at this point, and 'I' stands for 'Interface Segregation Principle'. And like a lot of the other principles in SOLID, it has been wildly misunderstood.

John Mikael Lindbakk - 2024-02-01

Read more

Object-Oriented Programming: It’s more than 'classes and stuff'

There are a lot of wildly misunderstood concepts in programming. Some that spring to mind are agile, unit testing and, yes, object-oriented programming. Let's talk about that.

John Mikael Lindbakk - 2024-02-01

Read more

Anemic Domain Models

It was not long ago I championed anemic models. They were great! Easy to set up for testing and easy to work with. They were malleable and adapted to whatever context I needed. I was wrong…

John Mikael Lindbakk - 2023-08-01

Read more

Observations After a Decade Making Software

The waves towered above our ship. Each time we reached a crest, I felt as light as a feather, freed from gravity's grasp, if only for a moment. The sea happily accepted our descent. I was cushioned by a mattress in my bunk each time we dropped. My port window showed nothing but water, a strange sight given that my cabin was above sea level at our departure.

John Mikael Lindbakk - 2023-08-01

Read more

The tech-debt death spiral

Technical debt is a sinister issue that plagues many companies, yet many of us are happy to ignore it. So many developers and managers are happy to prioritise other things over technical debt and allow our codebase to rot. Let's look into the nature of technical debt, what makes it so dangerous and how it can kill companies.

John Mikael Lindbakk - 2023-03-01

Read more

The joy of self-updating dependencies

As developers, we've constantly faced the choice between reusing existing solutions or writing them ourselves. Most of the time, we end up reusing something already existing, be it an ORM library, a web framework or something else. Most developers work on projects with a whole bunch of dependencies…

John Mikael Lindbakk - 2023-03-01

Read more

Why can't we just turn off infrastructure?

The other day I read 'Testing Without Mocks: A Pattern Language' by Jame Shore. The post is positively provocative, and it really made me think. The underlying idea is that we add code to production to simply 'turn off' infrastructure requirements for the application. The notion of simply switching off infrastructure got me thinking: Why don't we do that today?

John Mikael Lindbakk - 2023-03-01

Read more

John’s 9 Traits of Well-built Systems

Everyone has their view of what a well-built system looks like. We have the Joel test, the 12-factor app and many more. This inspired me to reflect on what is important in a modern system, at least to me.

John Mikael Lindbakk - 2022-12-01

Read more

Authorisation Patterns for Monoliths and Microservices

Authorisation can be represented by if and else statements, but the impact of how one decides to implement authorisation can have broad and long-lasting consequences.

John Mikael Lindbakk - 2021-08-01

Read more

The exciting new world of AI-generated code (Copilot)

A few days ago, Github released a completely new tool to the world called Copilot, and I am very excited about what it may lead to, which is why this post exists. I have not received an invite, so I have yet to try it out for myself, so these are just my thoughts based on what I’ve seen.

John Mikael Lindbakk - 2021-07-01

Read more

Useful tools: Feedly, Pocket & Kobo

There are so many different websites for news and articles these days. We have local newspapers, international news sites, blogs, tech sites and whatnot. With so many places which produce quality content, it is impossible to keep up.

John Mikael Lindbakk - 2021-02-01

Read more

The ultimate developer reading list (according to me)

This is my “master list” on literature which I believe to be relevant to developers. Rather than writing a new blog post for every book I read I will instead update this post right here. Do you think there’s a book I should read? Feel free to send the tip my way!

John Mikael Lindbakk - 2021-02-01

Read more

ORM framework anti-patterns

These days, most projects tend to use one form of ORM frameworks. They make development easier by hiding all that pesky database stuff away. ORM frameworks help with security, cuts down on bloat and remove a bunch of potential traps one can fall in if one opts for not using one. At this point, I’d be more surprised if a project using a database without an ORM framework.

John Mikael Lindbakk - 2020-12-01

Read more

Introducing .toUUID()

If I had to choose which aspect of software development I am most passionate about it would probably be how we make our products, which includes things like what kind of standards we follow when writing code, which tools we use, how we get our final code into production in a safe manner. I care about the long term sustainability of what we’re making. Therefore, to nobody’s surprise, I care a lot about: Code readability and Automated testing. Both of which .toUUID() attempts to help with!

John Mikael Lindbakk - 2020-10-01

Read more

Patterns of Narrow Integration Testing

John Mikael Lindbakk - 2020-09-01

Read more

Utility and helper classes - a code smell?

This is a very spicy & hot take of mine: I consider most utility or helper classes I’ve seen throughout my professional career to be a code smell and, generally, they are detrimental to the overall solution. Allow me to elaborate.

John Mikael Lindbakk - 2020-07-01

Read more

Spock and JUnit - a comparison

John Mikael Lindbakk - 2020-07-01

Read more

A brain dump on schema updates

Some of the most dangerous and scary things a developer does is making changes to the database. Be it fixing some dodgy data in production or changing the database schema all together. Users trust us to at least not lose any data, even less so to break it. SQL changes also tend to be somewhat of a 'side thing' compared to normal development.

John Mikael Lindbakk - 2020-06-01

Read more

Don’t use transient fields

Most ORM frameworks allow developers to code in values into the models which is actually not a part of the database model. Java calls this transient fields, which is the word I will use throughout this post as well. I aim to explain why transient fields are toxic, and how to avoid them.

John Mikael Lindbakk - 2020-06-01

Read more

The case of the else statement

Architecture happens at all levels of the application. We got the high level architecture such as diagrams and charts laying out the architecture of the solution and we can go all the way down to how functions are structured and how the code is written.

John Mikael Lindbakk - 2020-06-01

Read more

Useful tools: USE Together - Remote pair programming made easy

The current COVID-19 pandemic has shocked the world. For developers, like myself, it means that we’re working from home. Working from home is not an issue for me personally. I have an office, a good chair, reliable internet and everything an office has except for the people.

John Mikael Lindbakk - 2020-05-01

Read more

The importance of unit test names

The names of our unit tests might seem like the most insignificant part of our code. After all, they usually don’t even get shipped with the release code of our software, so therefore they cannot impact runtime functionality. To make it worse, the naming of a test does not impact the implementation of a test, so they cannot impact the running of these tests either. So the question becomes why I would make a blog post out of the importance of naming these tests appropriately.

John Mikael Lindbakk - 2020-05-01

Read more

Useful tools: Vim Vixen

I’m a keyboard guy. If it was practical I would love to throw the mouse away. This is why my personal computer runs Manjaro with the I3vm. A window manager which is the keyboard first. Often there’s applications which simply do not allow me to use keybindings, or are so unintuitive that it isn’t even worth learning them, whereupon I often script the functionalities I need and execute them from the command line. The point I’m trying to get across is that I love doing things from the keyboard…

John Mikael Lindbakk - 2020-05-01

Read more

Code Reviews - easy in theory, difficult in practice

The other day some of my coworkers and myself had a discussion about what it meant to do a code review. To my surprise it turned out that we had wildly different opinions on what it meant to have a pull request approved and what can be expected from the code reviewer. Some believed that code reviews are to check for bugs, performance issues and so forth. Others indicated that it is to check that we have made the correct thing. That the code does what the customer wants it to do. Others thought it was to check for code quality…

John Mikael Lindbakk - 2020-05-01

Read more