Progressive rollout, scheduling workflows, and experimentation with just a basic configuration

Dials on an old-school machine
Dials on an old-school machine
Photo by Dean Brierley on Unsplash.

When you build a new feature, orchestrating the actual launch schedule between the Product, Engineering, and Marketing teams can be challenging.

While it seems easy to launch something new, a poorly executed rollout can end up being your worst nightmare.

In this article, I will present to you how to use the Go module to roll out your new features smoothly and help you be confident during the rollout phase. If you are not familiar with the concept of feature flags or feature toggles, I encourage you to read this article by Martin Fowler.

is a Go module…


Always use the right kubectl version for your cluster 🎛

Photo by Sigmund on Unsplash

In my company, I keep switching on multiple Kubernetes clusters depending on which project I am working on.

And to make it even more fun they don’t have all the same version (yes we still have a k8s 1.9 running).
A good practice I try to follow is to keep the same major version of my and the cluster.
It avoids me to use some features that are not available already on my cluster version.

In this article, I will present the setup I use on my mac to switch from a cluster to another and how I install…


Use the Chain of Responsibility design pattern to modify app behavior based on configuration changes

Chain on a fence
Chain on a fence
Photo by Erik Mclean on Unsplash.

Chain of Responsibility or Chain of Command is a design pattern that lets you pass requests along a chain of . Each decides to process the request and enrich it or pass it to the next .

It allows you to have great isolation between each step and avoid having business logic in the middle of some technical logic. It also gives you the possibility to re-order your chain if what your app is supposed to do changes.

This is great, but why do we want it to be configurable?

The reason behind that is to be able to…


Tips to improve your Git experience and be more productive

Glasses in front of coding setup
Glasses in front of coding setup
Photo by ikukevk on Unsplash.

Git is a tool that software engineers have to use every day, so it is important to be happy and not waste too much time when using it.

I know there are plenty of UI tools on the market to help you with your Git experience, but after years of trying them, I’ve never had an experience as good as working with the command line.

Why? Because I’ve spent some time configuring my Git command line. In this article, I will present some tools/configs/aliases I use to make my life easier.

Aliases

Git commands are long and often super complex, so…


Fail fast and recover

This is an endless discussion when creating a new team or product; should I prioritise stability and availability over release frequency? In more technical terms, are you a mean time to recovery Team (MTTR) or a mean time between failure team (MTBF)?

MTBF and MTTR are metrics that together determine the availability of your system, so they have a direct impact on how your team is organised.

MTTR vs MTBF

This blog post is in favour of MTTR because it reduces the lead time (the time between the initiation and completion) of a feature; this is what we experienced in Adevinta.

MTTR is…


An example on how easily push and run serverless GO code in AWS 🚀

Photo by 贝莉儿 DANIST on Unsplash

If you read my previous posts you can see that I am working with Golang and AWS a lot, so in this one, I will present how I deploy a serverless API in AWS Lambda with an API Gateway to access it.

I will write the API using and to handle the http routing layer.

TL;DR

All the sources are available in thomaspoignant/cdk-golang-lambda-deployment repository

Create a serverless API in GO

So the first things we will do is creating an API using and the SDK, so we need to import these dependencies:


Use CloudFormation custom resources with CDK

Candle next to laptop on table
Candle next to laptop on table
Photo by Priscilla Du Preez on Unsplash.

Since I started using AWS CDK, I’ve been trying to use it for everything related to infrastructure. But I wanted to go a bit further and also manage my monitoring with it.

To achieve this, I am extending CloudFormation with the help of custom resources.

“Custom resources enable you to write custom provisioning logic in templates that AWS CloudFormation runs anytime you create, update (if you changed the custom resource), or delete stacks. For example, you might want to include resources that aren’t available as AWS CloudFormation resource types. You can include those resources by using custom resources. That way…


Boost your productivity with all the tools you need in one place

Assortment of tools
Assortment of tools
Photo by Todd Quackenbush on Unsplash.

I love working with Go because it is easy to code and easy to build.

But like with all other programming languages, you have to deal with a lot of tooling. To have easy access to these tools, I put everything in a makefile so I can , , and everything from a single place.

After building a lot of services, I now always use the same kind of makefile to help me properly build my projects. In this article, I will share what targets I use and why they are useful.

Note: Most of the targets use Docker…


Let’s improve the performance of our web applications

Assorted items on a coffee table
Assorted items on a coffee table
Photo by Jess Bailey on Unsplash.

A cache that periodically refreshes in the background is a common pattern that is used in several use cases, but how can we achieve this in Go? In this article, I will guide you through the concepts behind the implementation to help you understand how it works.


Your back end is a simple YAML file

Photo by Karim MANJRA on Unsplash

I absolutely don’t think human/manual QA gates should be involved in between the writing of code and its being live. To avoid breaking things every time and to have an early cutoff system, you should use feature flags.

There are a lot of systems available on the market to manage your flags, like LaunchDarkly or UNLEASH, that have Golang support — but this option is expensive, and you have to host a server somewhere to manage your flags.

From this starting point, I came up with the idea to create a simple library with only one file in the back…

Thomas Poignant

Techlead and cloud architect, I like to build great apps and deploy them on the cloud ☁️ ☁️ ☁️ #aws #go #java ☕️ #typescript #cicd

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store