Exploring Java Optional

At Armakuni we spend one day every fortnight away from client work to develop practices and the way we work. This week Tom Oram and I decided to investigate ways of using Java Optional to get the most value from it. The motivation for this exercise was based on our observation how Java Optional is often not used to the same level of usefulness compared to how it used in other languages — and of course to get a better taste of TDD and pair programming.


We not happy with how the Optional is used within Java the ecosystem

The lifetime of an Optional value in Java seems to usually only exist in a limited scope before it is unboxed with an orElse or similar. This is different to how this type is used in other languages (mostly functional) where the unboxing is deferred to the latest possible moment… Continue

Are you ready to accelerate your Cloud Native journey?

Assumptions — the silent and deadly sibling of issues and risks

On all projects, at least reasonably well-run ones, issues and risks are managed — tracked, assigned and dealt-with — but their sibling assumptions are often left as-is. We all know what issues are — something that is impacting the ability to delivery or operate.


Risks are closely related — one definition is that a risk is a potential issue, one that may or might not happen in the future. Assumptions are really hidden risks — where someone (or a whole group) decides on the most probably answer to an question… Continue

Are you ready to accelerate your Cloud Native journey?

Building With Behaviour-Driven Development

Building software with Behaviour-Driven Development is like building a house. Actually, it’s not — but it’s a metaphor I want to explore. The motivation for this post comes from the fact that every person I talk to seems to have a different idea of what BDD is. This article is simply me sharing my personal view of what I think it is.


I’ve heard BDD described in many different ways, some of these include:

  • Using Cucumber is doing BDD

  • BDD is a communication tool

  • BDD is like TDD but talking about behaviours instead of implementation

  • Gherkin feature files are BDD Tests

  • You are either doing BDD or TDD; you can’t do both

I have some pretty strong opinions on each of these points, but I don’t want to address them directly….Continue

Are you ready to accelerate your Cloud Native journey?

Migrating to serverless — a story of lessons learned

I recently migrated a GoLang API service from Cloud Foundry to serverless. For those that don’t know, CF (Cloud Foundry) is an open source PaaS (Platform as a Service).

I nearly wrote this blog as a transcription of what I did and why as going through my serverless experience, then I realised that I had a good chance of making you look like this…


So, keeping with the theme of trying to keep you awake we are going to focus on what we learned. Strap in this could get pretty wild! Continue

Are you ready to accelerate your Cloud Native journey?

Something Doesn’t Add Up: Why monitoring the wrong metrics can do more damage than good

Many organisations are starting to realise that there is value in metrics and monitoring of distributed systems. Typically, a team of software engineers build dashboards to display the number of transactions in-flight throughout parts of their system in real-time while operations teams build dashboards to visualise hardware utilisation or the size of an ever increasing database.


However, rarely does anybody ask if this information that will be radiated is actually useful. What value are these metrics providing? continue

Are you ready to accelerate your Cloud Native journey?

TDD — Choosing the Right Intermediate Steps

In this article, I show the importance of considering the right steps to make when doing TDD. I show that a seemingly simple addition to the code might introduce more complexity than expected — leaving code which is not covered by tests. I also show how taking the wrong steps can get in the way of the red-green-refactor cycle of TDD


An Example

I’m going to use an example. The aim is to create a Twitter-like social network application, where the user has a feed of messages.... continue

Are you ready to accelerate your Cloud Native journey?

Which Order to Write Your Tests?

I’ve seen many people do the Fizz Buzz TDD coding kata for the first time. For this kata, you typically use the red-green-refactor cycle, while working through a sequence of input numbers to test. One thing I have observed is that often the way the problem is described to the developer affects the sequence they choose to solve the problem.


In this article, I consider some common sequences I have seen. I then offer some thoughts about choosing the best path to take when solving a problem using TDD.... continue

Are you ready to accelerate your Cloud Native journey?

Introducing New Development Practices to a Team

Many companies have recognised the need to introduce new practices into their software teams. However, we often hear questions like “How do I convince managers to let us do TDD?” and “How do we get our development teams to pair program?”. In this article, I suggest that by investing in and empowering software development teams, these questions should never need to be asked.


Most development teams want to increase the quality of what they are creating. Meanwhile, most management teams want the developers to perform better (i.e. deliver faster and more consistently). We now have good evidence that increasing quality is actually the best way to improve performance.... continue

Are you ready to accelerate your Cloud Native journey?

Dependencies and Delivering On Time

It can be hard sometimes for me to visualize how dependencies and work in progress (WIP) affect delivery. In this article I’m going to try to show you how to put a rough number, a probability, to a projects ability to deliver on time. We’re going to do this with a easy to use logic tool: Truth Tables.


Before I continue it’s probably worth talking about what a dependency is in the context of this article.... continue

Are you ready to accelerate your Cloud Native journey?