Distributed Tracing: Modern Debugging in Times of Serverless

As Serverless is on the rise, the art of debugging and tracing is changing, too, as well as the day to day work life of Developers and Admins. At the Serverless Architecture Conference 2019 in The Hague, Billie Thompson, one of Armakuni’s Cloud Native Consultants, took time to discuss how Serverless is affecting the IT industry and how tracing is done in the times of Serverless.

Using Google Cloud Run

Google Cloud Run is Google’s new Serverless Container as a Service (CaaS) product. Serverless is a term with many meanings; in this case, it means your containers will scale to 0 running instances when no requests come into your service for a while.

Having 0 instances of quiet services means a service provider can afford to be a bit smarter with their pricing, only charging you when requests are hitting your application, and not charging you at all for the servers that do the scaling.


Internally it’s built on top of Knative (pronounced “Kay-native”). Knative is an open source platform for building Functions as a Service (FaaS) services on Kubernetes, so perhaps we will see extensions in that direction in the future from Google. You could build a version of this on a private cloud by deploying Knative and using the “kn” client, what makes this different is that you’re not paying for the idle capacity on the Kubernetes cluster….. Continue

Are you ready to accelerate your Cloud Native journey?

TDD — A New Transformation

In this article, I question whether there is a transformation missing from the Transformation Priority Premise (TPP). In my last article, I implemented a simple function which checked whether the input number was odd or even. The goal of the exercise was to strictly adhere to the TDD cycle while also making sure I had all the tests I wanted at the end. This exercise lead to an impasse problem, where I couldn’t write the next failing test without changing the behaviour.


To get beyond this impasse, I changed the behaviour in the refactor stage and claimed that it was OK to do so because it enabled the next step in the unfinished process…. Continue

Are you ready to accelerate your Cloud Native journey?

Lambdas with GoLang — a technical guide

In one of my previous blogs I talked about migrating an app to Lambda. One challenges I had with my migration was finding good example and guides for Lambdas written in GoLang. The “Getting Started” type guides were great but it didn’t take long to exceed their limits of usefulness.


Whenever I was looking for more advanced examples I found myself having to read a Javascript tutorial and work it out. Hopefully you find this helpful…. Continue

Are you ready to accelerate your Cloud Native journey?

TDD — Lookahead Refactoring

In this article, I want to consider a situation where considering the next test we want to write, influences the way we refactor.


For this article, I want to consider implementing a simple function to check if a number is odd or even. The function will simply return true if it’s given an even number, and false if it’s given an odd number.

As with my previous TDD articles, we are working very rigidly with the TDD cycle — we must write a failing test, we must implement it in the simplest way possible, we may then refactor… Continue

Are your ready to accelerate your Cloud Native journey?

An insight into JAX London 2018

Last week I had the opportunity to attend the JAX London conference and I am so grateful to Armakuni for making this possible. It was a great way to learn more about the hot-topics now in our industry, to concrete some of the knowledge I gained over the last months and to get to meet new people!


The conference spanned across 4 days, where the first and last days were workshops and the two days in the middle where full-on presentation days from amazing speakers…. Continue

Are you ready to accelerate your Cloud Native journey?

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?