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
go-feature-flag 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.
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
kubectl 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…
Chain of Responsibility or Chain of Command is a design pattern that lets you pass requests along a chain of
Handler 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…
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.
Git commands are long and often super complex, so…
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.
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.
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
go-chi/chi to handle the http routing layer.
All the sources are available in thomaspoignant/cdk-golang-lambda-deployment repository
So the first things we will do is creating an API using
go-chi and the
aws-lambda-go SDK, so we need to import these dependencies:
go get github.com/aws/aws-lambda-go
go get github.com/awslabs/aws-lambda-go-api-proxygo get github.com/go-chi/chi
go get github.com/go-chi/render…
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…
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
run 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…
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.
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…