Here are 7 posts I thought were worth sharing this week.
Google: A Collection Of Best Practices For Production Services – Link
This is an amazing read. Building resilient systems is hard. The first step to building resilient systems is to become aware of the practices that are used in the trenches. All the practices are worth reading/knowing and you should look for opportunities to apply them in your environment . Every few weeks I see teams struggling with making configuration changes safely. Article gives some practice advice on the same. Writing fail-safe and resilient HTTP clients is not easy. HTTP clients are used heavily in Microservices architecture. Most developers consider the happy path when service either succeeds or fails with expected response codes. But, we need to consider retries with jitter, timeouts, queueing, load shedding, etc while building HTTP clients. This article covers a few more practices that can help us build resilient systems.
Understanding AWK – Link
This is a good and long introduction to Awk. Awk is a record processing tool written in 1970’s. It is installed in all POSIX systems. It is one of those tools which you can use to write quick one-liners to automate your job. I also covered a couple of examples of awk in my earlier post on htmlq.
Designing Low Upkeep Software – Link
This is an interesting post on things to keep in mind while designing hobby projects where you want to keep maintenance cost low. Most people lose interest in hobby projects once the first version is finished. Author made a few suggestions on how to keep maintenance costs low. The main suggestions being keeping dependencies to a minimum and implementing as minimal as possible. The problem with this suggestion is that it makes the initial development cost higher. Also, there is no fun doing undifferentiated heavy lifting. When I build hobby projects I want to come to the meat of the project. This usually means picking up off the shelf components/frameworks/libraries and getting to speed quickly. I am not totally against the suggestion made by the author as well. I have a project that I developed last year using Kotlin, Spring Boot, and Vue.js.All the three have moved ahead in the last year. Getting the project to its current state would at least require a weekend worth of effort. I think we have to look for the middle path here.
Architecturally Significant Decisions – Link
I wrote this post where I expand on Michael Nygard’s blog on Documenting Architecture Decisions. Michael defines architecturally significant decisions as those decisions that affect the structure, non-functional characteristics, dependencies, interfaces, or construction techniques. I add examples to each of the five decision categories.
Eating the Cloud from Outside In – Link
Cloudflare founders declared in a post that they want to become the fourth major cloud provider. With the recent release of R2, an S3 API compatible cheap object storage service they are now looking to disrupt AWS S3 business model. This post takes an outside in look into the Cloudflare strategy and how it will disrupt the cloud.
Best practices for staging environments – Link
This post covers best practices for creating and maintaining staging environments. Staging environments can help you uncover known-unknown issues with your application. They give confidence to the team to deploy changes to production. Staging environment should be as much as possible to the production environment. It will be proportionally smaller compared to the production environment but it should have all the components.
3 ways to auto-increment with Postgres – Link
Postgres is my favorite database. In this post, the author covers three ways in which we can do auto-increment with Postgres. I was aware of the sequence way of doing things but serial and identity were new to me.