When is it done? An opportunity to help managers manage
Many developers will have heard a manager ask "when is it done?" and have felt a combination of irritation and dread.
Many developers will have heard a manager ask "when is it done?" and have felt a combination of irritation and dread.
After 25 years in software engineering, I’ve witnessed many projects, from great success stories to those that never quite lived up to their promise. In our profession, success is not just about technology. Sure, we love our frameworks, CI/CD pipelines, and microservices. But the real power of a high-performing team lies in something much deeper: team dynamics.
In this blog I want to dive into the why, how and what of team dynamics and why it’s such a crucial element in the success of your project or organization.
Over the last few years, the software industry has been in the grasp of an all-overshadowing discussion on the use of AI and LLMs. What started as a fun experiment with ChatGPT showing this “intelligence” was sometimes capable of writing somewhat coherent compiling code has quickly grown into a plethora of LLMs, AIs, IDE plugins and tools built upon AIs influencing (or taking over) every aspect of software development.
While the discussions do address the value and shortcomings of the tools I find myself pondering the effect this will have on our profession more.
Since Java 9 the methods requireNonNullElse and requireNonNullElseGet are part of the java.util.Objects class. The method requireNonNullElse accepts two arguments. The first argument is an object that will be returned if that object is not null. The second argument is an object to be returned when the first argument is null. With this method you can replace the following ternary operator if (a != null) ? a : b (or if (a == null) ? b : a) with Objects.requireNonNullElse(a, b).
The method requireNonNullElseGet allows to define a Supplier function as second argument. The Supplier is only invoked when the first argument is null, so it is lazy and will only be invoked when the first argument is null.
Java 25 (the new Long Term Support version) was released on September 18th 2025, and with it, some new cool features have been released. Which features are available to help improve my code? In this blog, I will give you a brief introduction to the released features which you can use directly as a developer (previews, experimentals and incubators are not included).
Sometimes you want to transform a string value into a URL encoded value, so it can be used as part of a valid URL. For example a string with spaces or special characters can not be used in a URL as is, but needs to be URL encoded. Nushell has the url encode command to achieve this. You can simple run this command on a string value and the result is a URL encoded value. With the option --all or -a even more special characters like a dot (.) are encoded. The input of the command can be a string value or a list of string values. But it is also possible to use a record or table structure, but then you need to add as extra argument the name or names of the keys or columns of which the string values should be encoded.
Oppossed to URL encoding a value you can also decode a URL encoded value using the url decode command. This command doesn’t have a special option to run. Just like with the url encode command the url decode command works on strings, list of strings, records and tables. If the input is a record or table the name of key or column of which the values must be decoded must be passed as extra arguments.
Groovy supports operator overloading since the start. Operator overloading is implemented by an actual method signature that maps to an operator. For example an object with a plus method can be used with the + operator. There is a list of methods and operators available on the Groovy website.
As long as an object has a method with a name that Groovy understands the corresponding operator can be used in Groovy code. This is even true for Java objects. Since Groovy 5 you can use the groovy.transform.OperatorRename annotation on classes, methods or constructors to map other method names to the Groovy operator overloading method names. This is very useful for third-party classes that you cannot change, but still want to use simple operators in Groovy code. You can reassign a method name to the following methods so an operator can be used: plus, minus, multiply, div, remainder, power, leftShift, rightShift, rightShiftUnassigned, and, or, xor, compareTo. Suppose you use a class with an add method and want to use the + operator for this method. The following annotation can be used @OperatorRename(plus = 'add') for a method and inside the method you can use the + operator instead of the add method of the class.
You’re coding late at night. The lights are low. Your favorite playlist is playing, maybe something only you would call “focus music.” Your IDE is set to a theme that feels just right. You’re not rushing. You’re not distracted. You’re in the zone.
This is vibe coding.
Kotlin is null-safe, a quote I hear often from Kotlin developers.
And yet, I still managed to get a NullPointerException while converting a java.util.Optional to a nullable Kotlin value…
Early on in their career, most software developers develop a muscle memory for writing efficient code and avoiding code duplication. It’s unfortunate that in modular architectures, this practice can seep through into data modelling without context awareness, leading to tight coupling and constraining the software’s ability to be changed.