Photo of Katowice by MarcelWojcik from Pixabay.

A few years back, I was thinking about myself as a highly skilled software developer, which is underestimated and works below his qualifications. I decided to change company and started to work for Vattenfall IT Services Poland, and I could not be more wrong about my skills.

In this article, I will share my thoughts about working there for over three years. Today I am no longer working for Vattenfall, so this is more like a retrospective and, I hope, a little guidance for you regarding your career. You will not find any metrics or raw data about my personal…


Photo by Pixabay from Pexels.

Modifying data in a class where they reside is always a good thing. The Tell Don’t Ask principle guides us on how to follow such an approach. Unfortunately, it is widespread to obtain data from object and process it inside some service or manager class. After this article, you will know how to talk with objects and process data inside them instead of pulling their logic out of objects. You will be able to test your new skill with kata exercise.

Benefits of Tell Don’t Ask principle

At the first glance, obeying the Tell Don’t Ask principle might look like a cosmetic change for the code…


Photo by hannahalkadi from Pixabay.

Working with modular software is something that not all of us can be blessed with. The code that is properly isolated and hidden behind abstraction seems to be a unicorn, that we heard about, but didn’t see it. Even if you did not see it, there is no argument not to chase it. The Law of Demeter can be something that keeps the track of your horny friend.

It is a not-so-fresh idea, as it was published in late ’80 on Northeastern University, but it still is relevant. The Law of Demeter defines, how objects interact with each other. It…


Featured photo by Adrienne Andersen from Pexels.

Object-Oriented Programming is a paradigm that instructs us, how to organize data and function into objects. Those objects are structures that should be designed to reflect the real-world object. Fortunately, we have four principles defined: abstraction, polymorphism, inheritance, and encapsulation, which will lead us towards good code quality. Unfortunately, for years I understood them improperly, even if I was really convinced that I know them well. This article has to shorten your way to an understatement of the OOP paradigm.

During this article, we will focus mostly on practice with a little theoretical background. Even if all code samples are…


Photo by Dominik Scythe on Unsplash

Imagine designing a new part of the application for a business that is not well defined yet. After a few knowledge-crushing sessions, you see the first boundaries of the new model and start to know how the business is running. Together with the team, you are making proof of concept of the application, but you are also making a conscious decision to take a technical debt, just to speed up development. After a few sprints, it appears that precious PoC became a production-working application that nobody wants to work with because of tests complexity and deployment problems. …


Developers are lazy. While reviewing an API, I’ve seen a lot of cases, that the only response codes returned were 500 (aka “backend is not working”) and 400 (broadly known as “frontend messed up”). “Better” APIs were also returning 404 and authentication/authorization failure codes. Such an approach is fast to implement and covers most of the use cases. But have you ever wonder, what will happen if developers have the possibility and time to experiment? They will delve into it.

This article has to make you pay attention to the quality of messages returned by your API, with the biggest…


Testing an application during development should be something that is not disturbing our work but supporting it. Having a clear distinction between fast unit tests, and complex, but slower integration tests is a good start for achieving a quick feedback loop. The faster we will get a result of the most relevant test, the quicker we can implement new features without breaking the application logic. Unit testing is great during core logic development, but from time to time, we need to take a broader view and use integration tests, to check, how our module is interacting with other ones. In…


Photo by Cameron Venti on Unsplash

Testcontainers are powerful library that allows you to reproduce production environment on every developer’s computer with Docker containers. It reduces time needed for setting up environment and guarantees that everyone uses the same configuration, reducing number of potential points of failure.

Integrating Testcontainers into existing application can be painful due to past technical decisions, that binds you with some framework. After reading this article you will know how to manage Testcontainer manually and how to integrate any available container with your application. …

Paweł Pluta

Java Developer at Vattenfall, passionate about Unit Testing, Software Craftsmanship, new technology trends and Smart Homes.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store