my blog. for you.

Let’s talk digital.

I’m an independent IT consultant and entrepreneur in the Internet and software business. I’m interested in design, enterprise applications, web apps and SaaS products. I design and develop business solutions and applications. I help companies in terms of software quality and knowledge transfer, e.g. with Angular and Spring Boot.

Linda Liukas – Programming Playgrounds @ beyond tellerrand Düsseldorf 2022

At this year’s iteration of beyond tellerrand Düsseldorf, Linda Liukas gave this fascinating opening talk on her ideas and concepts for a reimagined programming education: Read more

Christopher Alexander – Patterns in Architecture

Sadly, a few days ago, seminal architect and design theorist Christopher Alexander passed away. Having coined the term "pattern language" Christopher Alexander is considered the father of the pattern language movement. It is this term we as software engineers - oftentimes quite casually - refer to when we're talking about design patterns. In 1996, Christopher Alexander gave this compelling talk at the 1996 ACM Conference on Object-Oriented Programs, Systems, Languages and Applications (OOPSLA): In this talk, Alexander addresses the connection between architecture and software ... Read more

Performing Effective Code Reviews – A Checklist

A few years ago, software architect Surender Reddy Gutha compiled a - still quite relevant - Code Review Checklist. All too often, when performing code reviews, we as software engineers tend to focus on minute details such as code formatting rather than the big picture, non-functional requirements, or architecture and security considerations. Perhaps, the problem already originates with the term code review: Rather than reviewing code we are - or should be - reviewing the resulting software and the impact code changes ... Read more – Dataset with End-of-life Dates for Products

Recently, I came across, which is a quite useful database of product end-of-life dates. While it also includes hardware products (e.g., various iPhone models), its current main focus is software products, in particular those used in (enterprise) software development, such as Java, Spring, or Angular, or infrastructure and runtime environments like Docker or the Apache HTTP Server. A comprehensive, searchable collection of lifetimes for library and framework versions can come in handy when assessing - and potentially improving - the future ... Read more

Java Language Features Introduced From Versions 8 Through 17

The Java programming language and the Java Virtual Machine (JVM) are known for being very stable and favouring compatibility over new language-level features. This focus on stability arguably is one of the reasons why Java is so popular with larger companies, particularly those of the enterprise variety, where reliability, maintainability and a long-term outlook are key and typically more important than the latest and greatest features. However, starting in 2017, with the Java release cycle changed to rapid 6-months iterations, from the previous ... Read more

What is a (business) process, actually?

The terms process and business process, in particular, are sometimes used lightly and without thinking too much about what those terms actually mean. Drawing upon and thinking in terms of the concept of a value chain (i.e., a set of activities designed to create a product or service that has value to a customer) some time ago I came up with this definition of what constitutes a process, not just when it comes to business and market value, but also with regard ... Read more

Inversion of Control vs Dependency Injection

Dependency injection is one way of implementing inversion of control - a programming principle that allows for better modularity and extensibility. Dependency injection is commonly achieved via constructor injection, field injection, or setter injection. Inversion of control is an abstract concept, which dependency injection is a realisation of. Other methods of implementing inversion of control for example include the template pattern, service discovery, delegates, events, and currying (when applying a functional programming paradigm). Read more

Hexagonal Architectures: @Column(nullable = false) vs @NotNull in Java Applications

Recently, I came across a small and common, but all the more interesting, hands-on example of why a hexagonal architecture can help with making both the architecture and the code of an application more understandable, approachable, and maintainable. I won't be going into any details about the concept of and ideas behind hexagonal architecture here. The gist is summarised quite nicely in this quote from Tom Homberg's article on Hexagonal Architecture with Java and Spring: The main feature of “Hexagonal Architecture”, as opposed ... Read more

A few random thoughts on the development of software development in recent years

Last year, I replied to Tom's question "Has software development grown harder over the last years or have I just grown sluggish?" on Twitter with these incoherent ramblings of a greybeard, who has seen at least 3 fat-client-thin-client cycles: As usual it depends. Just a few examples: Spring Webflux and the "Everything has to be reactive even if the requirements don't demand it." fad is a bane. Just recently, I've been helping a client with getting Spring 5's WebClient to work with a ... Read more

A Catalogue of Design Patterns

Recently, I came across this well-structured as well as visually appealing catalogue of software design patterns on Refactoring.Guru. The subject of design patterns can be a somewhat dry, unwieldy one. Hence, using visuals and metaphors can come in handy when explaining both the general idea behind design patterns and specific patterns alongside with their use cases. Refactoring.Guru does a great job not only at explaining the origin and purpose of and rationale behind design patterns and pattern languages but also at describing each ... Read more
Next Page »