Cloud-specific software architecture patterns

This post is about software application architecture patterns that simplify application design by leveraging cloud features. New: Download the cloud pattern cheat sheet Packaged configuration Packaged configuration cue card What Configuration is packaged with deployment artefacts Motivation Simplify system, increase resilience by removing runtime dependency on configuration service How Configuration is managed in configuration repository, … Continue reading Cloud-specific software architecture patterns

Code reusability: from classes to containers

What is the right code granularity? I have previously written about reusing functionality [1] in the micro service context and found then that the old aim to optimise code footprint is a metric in need of a good overhaul. Ever since I'm happy that the idea is getting traction: Classes, libraries, applications OOP reuses code … Continue reading Code reusability: from classes to containers

Scalability through client-driven workflows

This post discusses a way to increase a service architecture's scalability by removing any communication paths between services and instead burdening clients with that communication. Bureaucracy in real life is a trade-off between ease of work for the applicant vs. ease of work for officers  In "Les 12 travaux d'Astérix" [1], Asterix and Obelix are … Continue reading Scalability through client-driven workflows

Of Babylonian kings or why technical users in user stories are OK

Every time a technical system impersonates a human in a user story, God drowns a kitten in an agile waterfall.-- Unknown User stories are supposed to advocate the user's view on a system's behaviour. Whatever technical systems which interface with "our" system think or do does not interest us. But why then is it so … Continue reading Of Babylonian kings or why technical users in user stories are OK

The art of copy & paste in programming

Code structures help fit code into your head Every programming course starts with showing a "hello world", moves on to computations, I/O, control structures, data structures and code structures. The necessity for data and code structures doesn't become obvious until one has written a larger programme. Until then (and often even then) it feels like … Continue reading The art of copy & paste in programming

Securing a development server

In this post I talk about setting up and securely operating development tools like Jenkins and Gitlab on a server connected to the internet. All applications run behind a firewall and a reverse HTTP proxy which allows only HTTP requests from selected users through who authenticate themselves with client certificates. Putting web-facing software on the … Continue reading Securing a development server

Defensive software architecture

In this, hopefully, last post on this blog of the year I will try to gather my scattered thoughts on software architecture and specifically the need for defensive software architecture, and substantiate it with anecdotal evidence from my own project work. I will first talk about my definition of architecture and that of an architect … Continue reading Defensive software architecture

On URL accuracy, versioning and the immutable-redirect pattern

So you have this requirements: serve content (might be a static file or a dynamic page) under a URL make it cacheable by defining appropriate HTTP expiration headers yet, the content might change - serve it under a new URL the old URLs should still be valid but show the new content In my current … Continue reading On URL accuracy, versioning and the immutable-redirect pattern

Speeding up development by splitting a webapp into parts

I love tagfiles: they feature a well known syntax (EL from JSP), they allow for reusable UI components, they are well supported by my favourite IDE and, most importantly, modifications are instantly visible because the servlet container does not have to restart. At least in theory, because reality often looks different: after a few edits … Continue reading Speeding up development by splitting a webapp into parts