Skip to main content

Posts

Two truths, and an AI

Recent posts

It wasn't a surprise, but it was a surprise

It wasn't totally unexpected It's Friday 13th March 2026, the news is still sinking in that I have been made redundant due to Atlassian's decision to reduce costs by cutting 1600 from the workforce. I've been telling friends and family that I'm okay and that it wasn't entirely unexpected. My teammates had been speculating and half-joking about the prospect of layoffs in the last couple of weeks, particularly as one of the developers had been unlucky enough to go through a couple of rounds of redundancies at his previous companies. Getting mixed signals Earlier in the week I had received an invitation from the talent acquisition team to participate in interviewing a candidate for a software engineering position next Tuesday, so I quietly thought, "hmm, maybe we're not in a total hiring freeze after all", and also, "oh crap, that goal related to participating in interviews is still going to be relevant this quarter so I'm gonna need to compl...

The morning of the redundancy announcement email

A day  morning in the life of a developer Code reviews Blocking for required changes Checked Bitbucket for fresh pull requests on my team's repositories that require approvals before they could be merged in and included in a deploy. One of the changes involved a private function for calculating some dates that included logic based on the current date. The documentation comment appeared to be incomplete so I couldn't quite tell what it was intended to do. I added a couple of comments, mainly proposing that the date calculation logic should be extracted out to its own component with a Clock being provided as a dependency so that we could cover it with tests and have control over what the value of "now" would be for the Clock component. On this particular day I made the decision to be a little bit stricter in my feedback, so I clicked the "Changes required" option meaning that I would have to come back to re-review the pull request before it could be progressed...

Having a go at learning some Kotlin

What's this about?  The year 2025 is almost over, so that means that it has been a bit over a decade since my old colleague Filippo gave a presentation to the development team of ScienceDirect covering the merits of the Kotlin programming language. So, it's about time that I had a proper go at using it. This blog post is intended to trace what the experience has been like, covering surprises that I encounter along the way. Getting started The programming language that I am most experienced with is Java, so I have chosen to try out implementing some functionality in Kotlin from a recent hobby project that I developed in Java involving spinning up a database in a Docker container and running some queries. JVM version support IntelliJ IDEA includes some automation for creating a new project, so I selected the relevant options to use the latest LTS version of the Java virtual machine with Spring Boot, Kotlin, Postgresql and Test containers. After a few seconds I had a new project i...

Redis website had some out of date references

I picked the wrong place to refresh my Redis know-how  I started this post with the intention of making some notes about my experiences with learning more about how to apply Redis to solve a few common problems, but I stumbled across some out of date content and odd behaviour of the redis.io website so I'm making some notes about that instead. Rate limiting Java sample code missing  This was of interest as it sometimes comes up in interviews, so I wanted to look into an elegant solution. https://redis.io/learn/howtos/ratelimiting As I am mainly a Java developer, I followed the instructions for Java but didn't get very far as the repository that is mentioned seems to have been cleared out. The commit history seems to indicate that the repository has not been updated for a couple of years, so this wasn't a great start. Python. NodeJS and Ruby all show as still having code in their Github repositories. Website connection timeout The references section on the rate limiting howt...

Not that Stephen Souness

I don't have a very common name, but there is another Stephen Souness in New Zealand that made the news for bad reasons in 2020. It sometimes shows up highly ranked in search results for my name on the Internet. For the avoidance of doubt, my full name is Ian Stephen Souness so if you happen across court news about another Stephen Souness, know that's not about me.

Caching successful DNS in modern Java

Things have moved on a bit since I set up a custom DNS resolver for microservices to enable them to continue to use known successfully resolved addresses when DNS resolution subsequently fails. Since Java 22 we can specify a value in a file in the JDK to have the option of continuing to use successful lookup results even after the TTL expires.  The property name is:  networkaddress.cache.stale.ttl https://bugs.openjdk.org/browse/JDK-8306653 The compromise  A trade-off to consider when applying that approach instead of a customised DNS Resolver is that we would not have the option of detecting when normal DNS resolution has failed. Hypothetical situation Let's suppose that a minor adjustment was applied to the deployment approach for rolling out a new version of microservices within the organisation's VPC. We might start to notice intermittent errors showing in our logs, where some unintended temporary DNS clear out results in continuing to send requests to the old address...