The Swiss Cheese model metaphorizes the defense against some risk with layers of cheese. Each layer of cheese has holes in it. The more layers you stack on top of each other the less likely it is that the holes will align...
It is important to remember why a task is performed. I’ve seen
a lot of programmers that focus too much on the what and the how.
It doesn’t matter what technology is used or how efficient
the solution is if it doesn’t solve any problem...
When interviewing for an open position as a software developer,
a lot of focus is spent on technical knowledge and not so
much is spent on soft skills. I suppose this is because
technical skills can actually be measured. At least to some
degree. Soft skills on the other hand is very subjective
and also depends on the context and culture you are
working in...
I have been doing a fair amount of programming puzzles recently as
I’m switching jobs. Mainly, I have been doing puzzles from
leetcode.com...
Microservice architectures have been in fashion for several years
now in the Java community. There are a few ways to achieve modularization
without incurring the full cost of a microservice architecture...
A lot of features of Spring framework rely on aspects to add solutions to cross-cutting
concerns. These aspects are usually enabled through annotations. This gives a nice
declarative way of handling cross-cutting concerns without impacting your actual code...
Depending on what type of system you are working on,
being able to trace back the history of changes might
be necessary. In a financial system, it might not only
be helpful, but also a requirement to be compliant...
Finding the root cause of a problem is a valuable
skill. If you continuously hunt down the root cause of your production
issues and address them. Then gradually, your system will
become more stable as time passes...
Random links to articles and videos that I’ve found useful. This list is perhaps mainly
for my own memory...
I think that many Java programmers don’t spend enough time thinking about
their package structure. I also think that most Java programmers get their
package structure wrong by instinct. They tend the follow a “package by layer”
principle, I.e they bundle classes together based on some common technical
principle. Maybe all the Repository classes go in one package and all the
Controller classes go in another package...
Decomposition is the process of breaking down a problem into smaller sub-problems that are easier to reason about.
When composing the solutions to the sub-problems together the bigger problem is solved...
The idea of having a set of rules one can follow to write
good code is appealing. I don’t think one can follow such
rules strictly, you will be forced to violate them
quite often. I have already touched upon this
on this site. In this
post, I will list some rules that I have found in my career...
Reactive Programming has been a trend in the Java space
in the last few years. It promises more efficient utilization
of the CPU. It does this by not running blocking (typically slow)
operations in a CPU thread. To do this, you have to write
your code in a certain way, typically with continuations instead
of a classic imperative style. See for example
Spring Reactive...
Processes are a “recipe” we follow to ensure that something is performed.
Usually, this is either supposed to fix something we are bad at. Or
it is supposed to guarantee that something really bad doesn’t happen...
I’m currently reading the classic book “Peopleware”.
I’ve never really read books on management before, so it’s
interesting to read about stuff that I’ve previously only
noticed by doing on the job...
The importance of having a good test environment is
something that I believe a lot of companies get wrong.
And it’s quite easy to understand why. During the startup
phase of a company, this will not be a top priority.
For a startup it might even be fine to test code
in prod...
One of the selling points of a microservice architecture
is often that it will be more stable. If one microservice
encounters a failure it does not bring down your
entire system. At least that is what advocates say...
I’m reading the book “Designing Data-Intensive Applications”
by Martin Kleppmann. I found the list of attributes that
describes the quality of a system quite good. So I thought
I would replicate it here...
A simple and free way to set up a blog is to use
GitHub pages. In fact, that
is how this web page is created...
One big disadvantage of exposing anything as an API is that
it tends to be difficult to change once others have started
using it. Generally, anything related to programming that is hard
to change is going to become a problem...
Remote debugging is one feature I didn’t realize I needed
until I worked in a team where I was integrating towards
a third party that was calling my code...
Making decisions can be hard. Especially making hard
decisions with large consequences. That’s the reason
why company leaders have such high salaries...
It’s not uncommon for problems to only happen in production.
Being able to introspect your application can be a key
factor in determining what caused an issue...
The command-query separation (CQS) principle states that
every function should either be a command that performs an
action or a query that returns a value. But never both at the same
time...
Whether it comes to low-level design or high-level design, I find
it useful to think about abstractions that make sense. While this might
sound like an obvious statement, there are a couple of principles
that might lead you to create abstractions that don’t make sense...
As most of the stuff in the enterprise Java world, MBeans has a cryptic
name. What it does is provides a backdoor into your application...
Loading caches was coined by Guava. They are also
implemented in the popular caching library, Caffeine...
I recently added tags to my GitHub pages (i.e. the page you’re currently viewing).
I mostly copied it from mindust.com so I figured I should give that page
a shoutout...
Writing parallel Java code has certainly become
easier with the newer Java versions...
It amazes me how often you see useless code documentation.
By “useless”, I mean documentation that doesn’t add any information
that isn’t already present in the type signatures...
One problem with architectures and code styles is that
they don’t have a strict definition. Instead, they typically
exist as a drawing or on a company wiki. Or even worse,
in the collective mind of the company’s senior employees...
I watched a really good talk on Vim. It taught me a couple of
goodies that I didn’t know since before...
My interests primarily lie in the technical side of software
development. But through experience, I have learned that
the softer values matter. In this post, I’m going to try
and summarize some thoughts on how to keep your developers
productive...
I have been working with Spring at work for a couple of years now.
One thing that has struck me regarding Spring is that it discourages
from having business logic on stateful classes...
I just learned that you can persist the history between Vim sessions. This is hugely useful in my view, and it just takes two lines in your vimrc to set it up...
Welcome to my blog! Here I will post notes and random ramblings about software development...