---
title: "Content Library"
lang: "en"
author: "Mohammad Abu Mattar"
canonical: https://mkabumattar.com/content
---

# Content Library

Nine kinds of thing, from a one-screen tip to a whole roadmap. Start wherever your afternoon actually is.

## How much time do you have?

-   [5 minutesDevTipsOne idea, one screen.](/devtips)
-   [15 minutesCheatsheetsLook something up, get out.](/cheatsheets)
-   [A long sittingRoadmapsWork through a whole subject.](/roadmaps)

[36 not published yet](/coming-soon)

## Pick up where you left off

## [Latest Blog Posts](/blog)

111

[View All](/blog)

[![Multi-Region Active-Active on AWS: What It Actually Costs You](/_astro/hero.Cvh9wZ5I_YXjpa.webp)](/blog/post/multi-region-active-active-aws-architecture)

## [Multi-Region Active-Active on AWS: What It Actually Costs You](/blog/post/multi-region-active-active-aws-architecture)

-   [Cloud Architecture](/blog/categories/cloud-architecture)
-   [Disaster Recovery](/blog/categories/disaster-recovery)
-   08 Sept 2026
-   12 Mins read

Surviving a full regional outage with no downtime is the thing every architecture review eventually asks about, and the answer is usually more expensive than the person asking expects. In a multi-regi

[#AWS](/blog/tags/aws)[#Multi region](/blog/tags/multi-region)[#Active active](/blog/tags/active-active)+5 tags

[Read Post](/blog/post/multi-region-active-active-aws-architecture)

[![Bun vs. Node.js in Production: A Real-World Performance and Compatibility Breakdown](/_astro/hero.C7RqJDtw_1AYoF8.webp)](/blog/post/bun-vs-nodejs-production-performance-comparison)

## [Bun vs. Node.js in Production: A Real-World Performance and Compatibility Breakdown](/blog/post/bun-vs-nodejs-production-performance-comparison)

-   [Backend Development](/blog/categories/backend-development)
-   [Software Engineering](/blog/categories/software-engineering)
-   26 Aug 2026
-   09 Mins read

The server-side JavaScript world in 2026 is comfortable with having more than one good option. Node.js has been the reliable workhorse for over a decade: stable, heavily tested, and predictable. Bun c

[#Bun](/blog/tags/bun)[#Node.js](/blog/tags/nodejs)[#TypeScript](/blog/tags/typescript)+5 tags

[Read Post](/blog/post/bun-vs-nodejs-production-performance-comparison)

[![Kubernetes Health Probes: Building Self-Healing Applications](/_astro/hero.i-e7H395_FhKa1.webp)](/blog/post/kubernetes-health-probes-self-healing)

## [Kubernetes Health Probes: Building Self-Healing Applications](/blog/post/kubernetes-health-probes-self-healing)

-   [Kubernetes](/blog/categories/kubernetes)
-   [Site Reliability Engineering](/blog/categories/site-reliability-engineering)
-   15 Aug 2026
-   08 Mins read

Kubernetes has a reputation for keeping applications online, but it is not magic. Out of the box, the cluster is blind to what happens inside your container. If your application deadlocks or exhausts

[#Kubernetes](/blog/tags/kubernetes)[#Liveness probe](/blog/tags/liveness-probe)[#Readiness probe](/blog/tags/readiness-probe)+5 tags

[Read Post](/blog/post/kubernetes-health-probes-self-healing)

## [Cheatsheets](/cheatsheets)

45

[View All](/cheatsheets)

[jqCLI Tool](/cheatsheets/jq)

[OpenSSLSecurity](/cheatsheets/openssl)

[Linux ProcessesOperating System](/cheatsheets/linux-processes)

[TypeScriptProgramming Language](/cheatsheets/typescript)

[Python Virtual Environments CheatsheetPython](/cheatsheets/python-venv)

[GitHub ActionsDevOps & Tools](/cheatsheets/github-actions)

## [Code snippets](/codesnippets)

21

[View All](/codesnippets)

[![Python Context Managers: Writing Clean Resource Handling with \`with\` Statements](/_astro/hero.B6UWa0_D_cA27v.webp)](/codesnippets/post/python-context-managers-resource-handling)

## [Python Context Managers: Writing Clean Resource Handling with \`with\` Statements](/codesnippets/post/python-context-managers-resource-handling)

-   [Python](/codesnippets/categories/python)
-   [Backend](/codesnippets/categories/backend)
-   13 Oct 2026
-   04 Mins read

Everyone learns with open(...) and stops. That is a shame, because the protocol behind it is two methods and it solves a whole category of bug: cleanup that does not happen on the paths you forgot a

[#Python](/codesnippets/tags/python)[#Context managers](/codesnippets/tags/context-managers)[#With statement](/codesnippets/tags/with-statement)+2 tags

[Python](/codesnippets/python)

[View Code](/codesnippets/post/python-context-managers-resource-handling)

[![Upload Files to AWS S3 with Pre-Signed URLs in Node.js](/_astro/hero.DybygcPa_e5EkU.webp)](/codesnippets/post/nodejs-s3-presigned-url-upload)

## [Upload Files to AWS S3 with Pre-Signed URLs in Node.js](/codesnippets/post/nodejs-s3-presigned-url-upload)

-   [Nodejs](/codesnippets/categories/nodejs)
-   [Aws](/codesnippets/categories/aws)
-   13 Sept 2026
-   05 Mins read

Routing file uploads through your API server is the default that nobody questions, and it is usually the wrong one. The bytes travel to your compute, sit in memory or a temp file, then travel again to

[#Nodejs](/codesnippets/tags/nodejs)[#Aws](/codesnippets/tags/aws)[#S3](/codesnippets/tags/s3)+3 tags

[Javascript](/codesnippets/javascript)

[View Code](/codesnippets/post/nodejs-s3-presigned-url-upload)

[![Python Dataclass Patterns: Slots, Frozen Instances, and Field Validation](/_astro/hero.CiNSoA2B_5XUnO.webp)](/codesnippets/post/python-dataclass-slots-frozen-field-validation)

## [Python Dataclass Patterns: Slots, Frozen Instances, and Field Validation](/codesnippets/post/python-dataclass-slots-frozen-field-validation)

-   [Python](/codesnippets/categories/python)
-   [Backend](/codesnippets/categories/backend)
-   31 Aug 2026
-   03 Mins read

Quick Tip Reach for @dataclass(slots=True, frozen=True) with a post\_init check and you get a small, immutable, validated value object in about five lines. The Problem The problem

[#Python](/codesnippets/tags/python)[#Dataclass](/codesnippets/tags/dataclass)[#Slots](/codesnippets/tags/slots)+3 tags

[Python](/codesnippets/python)

[View Code](/codesnippets/post/python-dataclass-slots-frozen-field-validation)

## [Case studies](/case-studies)

11

[View All](/case-studies)

[![A Service Mesh Rollout That Was Worth It](/_astro/hero.Uvd7kA_G_Z1cMt8C.webp)](/case-studies/post/service-mesh-rollout-when-worth-it)

## [A Service Mesh Rollout That Was Worth It](/case-studies/post/service-mesh-rollout-when-worth-it)

-   [Architecture](/case-studies/categories/architecture)
-   [DevOps](/case-studies/categories/devops)
-   20 Oct 2026
-   08 Mins read

The request that started this was not "can we have a service mesh". It was an auditor asking how we encrypted traffic between services, and the honest answer being that we mostly did not. Everything i

[#Service Mesh](/case-studies/tags/service-mesh)[#Istio](/case-studies/tags/istio)[#Kubernetes](/case-studies/tags/kubernetes)+4 tags

[Read Case Study](/case-studies/post/service-mesh-rollout-when-worth-it)

[![Cutting p99 Latency 60% with a Caching Rearchitecture](/_astro/hero.DE1RZUf0_SM8cL.webp)](/case-studies/post/p99-latency-caching-rearchitecture)

## [Cutting p99 Latency 60% with a Caching Rearchitecture](/case-studies/post/p99-latency-caching-rearchitecture)

-   [Architecture](/case-studies/categories/architecture)
-   [Performance](/case-studies/categories/performance)
-   13 Oct 2026
-   10 Mins read

The complaint that started this was not about speed. It was a support ticket saying the dashboard "sometimes doesn't load," from a customer whose account was roughly forty times larger than our median

[#Caching](/case-studies/tags/caching)[#Latency](/case-studies/tags/latency)[#CDN](/case-studies/tags/cdn)+4 tags

[Read Case Study](/case-studies/post/p99-latency-caching-rearchitecture)

[![Replacing Cron Chaos with an Event-Driven Pipeline](/_astro/hero.Dm63yRWp_Z1lGdiN.webp)](/case-studies/post/cron-to-event-driven-pipeline)

## [Replacing Cron Chaos with an Event-Driven Pipeline](/case-studies/post/cron-to-event-driven-pipeline)

-   [Cloud Architecture](/case-studies/categories/cloud-architecture)
-   [DevOps](/case-studies/categories/devops)
-   06 Oct 2026
-   10 Mins read

The handover note said "check the pipeline runs" and nothing else. Behind that sentence were 41 cron jobs spread across 6 EC2 hosts, some chained by sleep 900 because someone had once needed job B t

[#Event Driven](/case-studies/tags/event-driven)[#AWS](/case-studies/tags/aws)[#EventBridge](/case-studies/tags/eventbridge)+4 tags

[Read Case Study](/case-studies/post/cron-to-event-driven-pipeline)

## [DevTips](/devtips)

22

[View All](/devtips)

[![Kubernetes Persistent Volumes: Storage Classes, PVCs, and StatefulSets Explained](/_astro/hero.CvU9-BZR_9P9Mt.webp)](/devtips/post/kubernetes-persistent-volumes-storage-classes-pvcs)

## [Kubernetes Persistent Volumes: Storage Classes, PVCs, and StatefulSets Explained](/devtips/post/kubernetes-persistent-volumes-storage-classes-pvcs)

-   [Kubernetes & Containers](/devtips/categories/kubernetes--containers)
-   27 Oct 2026
-   06 Mins read

Why does Kubernetes make storage this complicated? The short version Hey, want your data to still be there after a restart? Then you need to understand three objects instead of one. That

[#Kubernetes](/devtips/tags/kubernetes)[#PersistentVolume](/devtips/tags/persistentvolume)[#PersistentVolumeClaim](/devtips/tags/persistentvolumeclaim)+5 tags

[Read Tip](/devtips/post/kubernetes-persistent-volumes-storage-classes-pvcs)

[![AWS VPC Design Best Practices: Subnets, Route Tables, and Security Groups](/_astro/hero.Db5Lgxho_Z199ayW.webp)](/devtips/post/aws-vpc-design-subnets-route-tables-security-groups)

## [AWS VPC Design Best Practices: Subnets, Route Tables, and Security Groups](/devtips/post/aws-vpc-design-subnets-route-tables-security-groups)

-   [Aws](/devtips/categories/aws)
-   [Networking](/devtips/categories/networking)
-   09 Oct 2026
-   05 Mins read

A VPC is one of the few things in AWS you cannot meaningfully refactor later. You can resize an instance, swap a database engine, rewrite a service. You cannot change a VPC's primary CIDR block, and y

[#Aws](/devtips/tags/aws)[#Vpc](/devtips/tags/vpc)[#Networking](/devtips/tags/networking)+3 tags

[Read Tip](/devtips/post/aws-vpc-design-subnets-route-tables-security-groups)

[![Speeding Up CI Pipelines: Caching, Parallelism, and Skipping Unnecessary Work](/_astro/hero.C77REPw4_ZtC2Xb.webp)](/devtips/post/speeding-up-ci-pipelines-caching-parallelism)

## [Speeding Up CI Pipelines: Caching, Parallelism, and Skipping Unnecessary Work](/devtips/post/speeding-up-ci-pipelines-caching-parallelism)

-   [Devops](/devtips/categories/devops)
-   [Ci cd](/devtips/categories/ci-cd)
-   14 Sept 2026
-   05 Mins read

A slow pipeline does not just waste compute. It changes behaviour. Once feedback takes longer than about ten minutes, people stop waiting for it. They context-switch, batch up changes into bigger pull

[#Ci cd](/devtips/tags/ci-cd)[#Github actions](/devtips/tags/github-actions)[#Caching](/devtips/tags/caching)+3 tags

[Read Tip](/devtips/post/speeding-up-ci-pipelines-caching-parallelism)

## [Flashcards](/flashcards)

13

[View All](/flashcards)

[![AWS Advanced Networking Specialty Flashcards (ANS-C01)](/_astro/hero.C9RKm__I_1NdqKK.webp)](/flashcards/post/aws-advanced-networking-specialty-flashcards)

## [AWS Advanced Networking Specialty Flashcards (ANS-C01)](/flashcards/post/aws-advanced-networking-specialty-flashcards)

-   [Aws](/flashcards/categories/aws)
-   40 Cards
-   ~17 min
-   15 Sept 2026

The ANS-C01 is the AWS exam least forgiving of vocabulary-only knowledge. Most questions describe a working topology, break one thing, and ask which of four plausible components is responsible. Knowin

[#Aws](/flashcards/tags/aws)[#Networking](/flashcards/tags/networking)[#Certification](/flashcards/tags/certification)+4 tags

[View Deck](/flashcards/post/aws-advanced-networking-specialty-flashcards)

[![Linux Foundation Certified System Administrator Flashcards (LFCS)](/_astro/hero.BNSlqpGT_2sCKPG.webp)](/flashcards/post/lfcs-linux-system-administrator-flashcards)

## [Linux Foundation Certified System Administrator Flashcards (LFCS)](/flashcards/post/lfcs-linux-system-administrator-flashcards)

-   [Linux](/flashcards/categories/linux)
-   [Certification](/flashcards/categories/certification)
-   32 Cards
-   ~13 min
-   02 Sept 2026

Spaced-repetition deck for the LFCS exam: essential commands, users and groups, storage, networking, services, and security.

[#LFCS](/flashcards/tags/lfcs)[#Linux](/flashcards/tags/linux)[#Systemd](/flashcards/tags/systemd)+3 tags

[View Deck](/flashcards/post/lfcs-linux-system-administrator-flashcards)

[![Docker and Container Fundamentals Flashcards](/_astro/hero.C1FTRLXg_2pGQM0.webp)](/flashcards/post/docker-container-fundamentals-flashcards)

## [Docker and Container Fundamentals Flashcards](/flashcards/post/docker-container-fundamentals-flashcards)

-   [Containers](/flashcards/categories/containers)
-   [DevOps](/flashcards/categories/devops)
-   41 Cards
-   ~17 min
-   22 Aug 2026

A spaced-repetition deck covering images, containers, Dockerfiles, volumes, networking, Compose, and registries.

[#Docker](/flashcards/tags/docker)[#Containers](/flashcards/tags/containers)[#Dockerfile](/flashcards/tags/dockerfile)+3 tags

[View Deck](/flashcards/post/docker-container-fundamentals-flashcards)

## [Glossary](/glossary)

10

[View All](/glossary)

[![NoSQL Databases](/_astro/hero.CyWb3NTa_Z1fUU7u.webp)](/glossary/post/nosql-databases)

## [NoSQL Databases](/glossary/post/nosql-databases)

-   [Databases](/glossary/categories/databases)
-   35 Terms
-   20 Oct 2026

Choosing a NoSQL database is not one decision, it is two: which data model, then which consistency behaviour. Getting the first wrong is expensive because in most of these stores the access pattern is

[#Nosql](/glossary/tags/nosql)[#Dynamodb](/glossary/tags/dynamodb)[#Mongodb](/glossary/tags/mongodb)+3 tags

[View Glossary](/glossary/post/nosql-databases)

[![Databases & SQL](/_astro/hero.CL-H3X3B_Z2aBMeP.webp)](/glossary/post/databases-and-sql)

## [Databases & SQL](/glossary/post/databases-and-sql)

-   [Databases](/glossary/categories/databases)
-   38 Terms
-   16 Sept 2026

Most confusion about SQL is vocabulary rather than syntax. People know how to write a join and still get caught by a LEFT JOIN that quietly behaves like an INNER JOIN, because nobody explained that a

[#Sql](/glossary/tags/sql)[#Databases](/glossary/tags/databases)[#Postgresql](/glossary/tags/postgresql)+3 tags

[View Glossary](/glossary/post/databases-and-sql)

[![Observability & Monitoring](/_astro/hero.D0Pm41Tc_1umMYO.webp)](/glossary/post/observability-and-monitoring)

## [Observability & Monitoring](/glossary/post/observability-and-monitoring)

-   [Devops](/glossary/categories/devops)
-   35 Terms
-   05 Sept 2026

A quick-reference glossary for making sense of system health: the three pillars (metrics, logs, traces), the reliability vocabulary (SLI, SLO, error budget, burn rate), how good alerting works, and th

[#Observability](/glossary/tags/observability)[#Monitoring](/glossary/tags/monitoring)[#Metrics](/glossary/tags/metrics)+1 tags

[View Glossary](/glossary/post/observability-and-monitoring)

## [Quizzes](/quizzes)

66

[View All](/quizzes)

[![Kotlin: Modern JVM Language Fundamentals](/_astro/hero.DOi4ejmM_Z3Rfvd.webp)](/quizzes/post/kotlin-fundamentals-quiz)

## [Kotlin: Modern JVM Language Fundamentals](/quizzes/post/kotlin-fundamentals-quiz)

-   [Kotlin](/quizzes/categories/kotlin)
-   [Jvm](/quizzes/categories/jvm)
-   20 Questions
-   ~5 min
-   27 Oct 2026
-   Level: Intermediate

Kotlin reads like a friendlier Java for about a week, and then you meet the parts that are genuinely different: nullability living in the type system, coroutines with a scope that owns its children, a

[#Kotlin](/quizzes/tags/kotlin)[#Jvm](/quizzes/tags/jvm)[#Coroutines](/quizzes/tags/coroutines)+3 tags

[Take Quiz](/quizzes/post/kotlin-fundamentals-quiz)

[![Ruby on Rails: Convention Over Configuration](/_astro/hero.Bde-8CIt_1wREiG.webp)](/quizzes/post/ruby-on-rails-fundamentals-quiz)

## [Ruby on Rails: Convention Over Configuration](/quizzes/post/ruby-on-rails-fundamentals-quiz)

-   [Ruby](/quizzes/categories/ruby)
-   [Web development](/quizzes/categories/web-development)
-   20 Questions
-   ~5 min
-   19 Sept 2026
-   Level: Intermediate

Rails is productive because it decided things for you. The router derives a controller and action from a verb and a path, the controller infers its template from its own name, and Active Record infers

[#Ruby](/quizzes/tags/ruby)[#Rails](/quizzes/tags/rails)[#Activerecord](/quizzes/tags/activerecord)+3 tags

[Take Quiz](/quizzes/post/ruby-on-rails-fundamentals-quiz)

[![PHP & Laravel: Modern Web Development Fundamentals](/_astro/hero.CPJco0Q1_2b2QUK.webp)](/quizzes/post/php-laravel-fundamentals-quiz)

## [PHP & Laravel: Modern Web Development Fundamentals](/quizzes/post/php-laravel-fundamentals-quiz)

-   [PHP](/quizzes/categories/php)
-   [Laravel](/quizzes/categories/laravel)
-   20 Questions
-   ~5 min
-   06 Sept 2026
-   Level: Intermediate

Ready to check how well you know PHP and Laravel? This quiz runs through routing and middleware, Eloquent relationships and the N+1 trap, migrations and seeders, Blade, and the artisan workflow. Read

[#PHP](/quizzes/tags/php)[#Laravel](/quizzes/tags/laravel)[#Eloquent](/quizzes/tags/eloquent)+3 tags

[Take Quiz](/quizzes/post/php-laravel-fundamentals-quiz)

## [Roadmaps](/roadmaps)

12

[View All](/roadmaps)

[![Go Developer Beginner to Expert](/_astro/hero.Bq3wvFVV_Z1sdb6M.webp)](/roadmaps/post/go-developer-roadmap)

## [Go Developer Beginner to Expert](/roadmaps/post/go-developer-roadmap)

-   [Learning](/roadmaps/categories/learning)
-   All Levels
-   8 Stages
-   44 Topics
-   23 Oct 2026

Go is small enough that you can read the whole specification in an afternoon, and that is precisely why people plateau. The syntax stops being the obstacle within a week, and the remaining difficulty

[#Go](/roadmaps/tags/go)[#Golang](/roadmaps/tags/golang)[#Roadmap](/roadmaps/tags/roadmap)+3 tags

[View Roadmap](/roadmaps/post/go-developer-roadmap)

[![Python Developer Beginner to Expert](/_astro/hero.aYn4gGLS_8UBNt.webp)](/roadmaps/post/python-developer-roadmap)

## [Python Developer Beginner to Expert](/roadmaps/post/python-developer-roadmap)

-   [Learning](/roadmaps/categories/learning)
-   All Levels
-   8 Stages
-   41 Topics
-   20 Sept 2026

Python is easy to start and deceptively deep, which produces a common shape of developer: fluent in syntax, productive in a framework, and unsure what happens when the code meets real traffic. This ro

[#Python](/roadmaps/tags/python)[#Roadmap](/roadmaps/tags/roadmap)[#Backend](/roadmaps/tags/backend)+3 tags

[View Roadmap](/roadmaps/post/python-developer-roadmap)

[![Node.js Developer Beginner to Expert](/_astro/hero.D_5O5m5i_ptSEb.webp)](/roadmaps/post/nodejs-developer-roadmap)

## [Node.js Developer Beginner to Expert](/roadmaps/post/nodejs-developer-roadmap)

-   [Backend development](/roadmaps/categories/backend-development)
-   All Levels
-   13 Stages
-   31 Topics
-   07 Sept 2026

Node.js Developer Beginner to Expert This roadmap takes you from JavaScript foundations and the event loop through building APIs, working with databases, streams, testing, and security, and on to r

[#Nodejs](/roadmaps/tags/nodejs)[#Backend](/roadmaps/tags/backend)[#Javascript](/roadmaps/tags/javascript)+1 tags

[View Roadmap](/roadmaps/post/nodejs-developer-roadmap)
