<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Advanced on Dev &amp; Platform Engineering Hub</title><link>https://rhidayat.work/level/advanced/</link><description>Recent content in Advanced on Dev &amp; Platform Engineering Hub</description><generator>Hugo -- gohugo.io</generator><language>en</language><copyright>© 2026 Rachmat Hidayat</copyright><lastBuildDate>Mon, 10 Aug 2026 01:15:00 +0000</lastBuildDate><atom:link href="https://rhidayat.work/level/advanced/index.xml" rel="self" type="application/rss+xml"/><item><title>Kubernetes Ep 15: Production Helm Charts &amp; Package Deployment</title><link>https://rhidayat.work/series/kubernetes/15-production-helm-chart-deployment/</link><pubDate>Mon, 10 Aug 2026 01:15:00 +0000</pubDate><guid>https://rhidayat.work/series/kubernetes/15-production-helm-chart-deployment/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;
 Managing dozens of static YAML manifests across multiple environments (dev, staging, prod) leads to repetitive code and configuration drift. &lt;strong&gt;Helm&lt;/strong&gt; is the official package manager for Kubernetes, enabling templating, parameterization, versioned releases, and one-click upgrades.
&lt;/div&gt;</description></item><item><title>Kubernetes Ep 14: Health Checks &amp; Zero-Downtime Rolling Updates</title><link>https://rhidayat.work/series/kubernetes/14-probes-healthchecks-and-rolling-updates/</link><pubDate>Mon, 10 Aug 2026 01:10:00 +0000</pubDate><guid>https://rhidayat.work/series/kubernetes/14-probes-healthchecks-and-rolling-updates/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;
 In production, a container might be in a &lt;code&gt;Running&lt;/code&gt; state according to Docker, yet completely unable to serve HTTP traffic due to a deadlock, database connection timeout, or slow boot sequence. &lt;strong&gt;Probes&lt;/strong&gt; and &lt;strong&gt;Rolling Updates&lt;/strong&gt; guarantee zero-downtime application deployments.
&lt;/div&gt;</description></item><item><title>Kubernetes Ep 13: RBAC, ServiceAccounts &amp; Security</title><link>https://rhidayat.work/series/kubernetes/13-rbac-service-accounts-and-security/</link><pubDate>Mon, 10 Aug 2026 01:05:00 +0000</pubDate><guid>https://rhidayat.work/series/kubernetes/13-rbac-service-accounts-and-security/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;
 Security in Kubernetes follows the Principle of Least Privilege. &lt;strong&gt;Role-Based Access Control (RBAC)&lt;/strong&gt; regulates who (Users, Groups, or ServiceAccounts) can perform which actions (verbs: &lt;code&gt;get&lt;/code&gt;, &lt;code&gt;list&lt;/code&gt;, &lt;code&gt;create&lt;/code&gt;, &lt;code&gt;delete&lt;/code&gt;) on which resources (nouns: &lt;code&gt;pods&lt;/code&gt;, &lt;code&gt;services&lt;/code&gt;, &lt;code&gt;secrets&lt;/code&gt;).
&lt;/div&gt;</description></item><item><title>Kubernetes Ep 12: Namespaces, Resource Quotas &amp; LimitRanges</title><link>https://rhidayat.work/series/kubernetes/12-namespaces-resource-quotas-and-limits/</link><pubDate>Mon, 10 Aug 2026 01:00:00 +0000</pubDate><guid>https://rhidayat.work/series/kubernetes/12-namespaces-resource-quotas-and-limits/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;
 In enterprise environments, a single Kubernetes cluster is shared across multiple development teams, environments (dev, staging, prod), and microservices. Without resource governance, a single misbehaving application can consume all cluster CPU and memory, crashing critical workloads.
&lt;/div&gt;</description></item><item><title>Kubernetes Ep 10: DaemonSets &amp; Cluster Node Agents</title><link>https://rhidayat.work/series/kubernetes/10-daemonsets-and-cluster-monitoring/</link><pubDate>Mon, 10 Aug 2026 00:50:00 +0000</pubDate><guid>https://rhidayat.work/series/kubernetes/10-daemonsets-and-cluster-monitoring/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;
 While Deployments distribute Pods across nodes based on available capacity, &lt;strong&gt;DaemonSets&lt;/strong&gt; ensure that a copy of a specific Pod runs on &lt;strong&gt;all (or selected) worker nodes&lt;/strong&gt; in the cluster. As nodes are added to or removed from the cluster, DaemonSet Pods are added or garbage-collected automatically.
&lt;/div&gt;</description></item><item><title>Kubernetes Ep 9: StatefulSets &amp; Stateful Database Deployments</title><link>https://rhidayat.work/series/kubernetes/09-statefulsets-and-database-deployments/</link><pubDate>Mon, 10 Aug 2026 00:45:00 +0000</pubDate><guid>https://rhidayat.work/series/kubernetes/09-statefulsets-and-database-deployments/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;
 While Deployments are designed for interchangeable, stateless application replicas, stateful workloads like PostgreSQL clusters, Redis Sentinels, Kafka brokers, and Elasticsearch nodes require &lt;strong&gt;stable network identities&lt;/strong&gt;, &lt;strong&gt;dedicated persistent volumes per replica&lt;/strong&gt;, and &lt;strong&gt;strict ordered deployment &amp;amp; scaling&lt;/strong&gt;. This is where &lt;strong&gt;StatefulSets&lt;/strong&gt; shine.
&lt;/div&gt;</description></item><item><title>Kratix Ep 12: Production Reference Architecture</title><link>https://rhidayat.work/series/kratix/12-production-reference-architecture-repository/</link><pubDate>Sun, 09 Aug 2026 22:00:00 +0000</pubDate><guid>https://rhidayat.work/series/kratix/12-production-reference-architecture-repository/</guid><description>We have reached the end of our journey. In this final episode, we combine everything we have learned—Kratix, Crossplane, ArgoCD, Vault, Prometheus, and Backstage—into a single, comprehensive reference architecture diagram that you can use to build your enterprise IDP.</description></item><item><title>Kratix Ep 11: Full IDP Integration with Backstage</title><link>https://rhidayat.work/series/kratix/11-full-idp-integration-unified-dashboard/</link><pubDate>Sun, 09 Aug 2026 21:50:00 +0000</pubDate><guid>https://rhidayat.work/series/kratix/11-full-idp-integration-unified-dashboard/</guid><description>While kubectl is powerful, it is not a Developer Portal. In this episode, we integrate Kratix with Backstage, creating a unified Web UI where developers can browse the service catalog, request infrastructure, and monitor their applications without ever opening a terminal.</description></item><item><title>Kratix Ep 9: Promise CI/CD with GitHub Actions</title><link>https://rhidayat.work/series/kratix/09-promise-cicd-github-gitlab/</link><pubDate>Sun, 09 Aug 2026 21:30:00 +0000</pubDate><guid>https://rhidayat.work/series/kratix/09-promise-cicd-github-gitlab/</guid><description>Platform Engineers write code too. When you build a complex Promise, you must compile the Pipeline container, lint the YAML, and safely deploy it to the Platform Cluster. In this episode, we build a robust GitHub Actions CI/CD pipeline to automate the lifecycle of Kratix Promises.</description></item><item><title>Kratix Ep 7: Secrets Management with ESO and Vault</title><link>https://rhidayat.work/series/kratix/07-secrets-management-eso-vault/</link><pubDate>Sun, 09 Aug 2026 21:10:00 +0000</pubDate><guid>https://rhidayat.work/series/kratix/07-secrets-management-eso-vault/</guid><description>GitOps has one fatal flaw: You cannot commit secrets to a Git repository. When Kratix generates a Redis password during a Pipeline execution, how does it securely deliver that password to the Worker Cluster? In this episode, we solve the GitOps secrets problem using HashiCorp Vault and ESO.</description></item><item><title>Crossplane Ep 15: Building an IDP with Backstage</title><link>https://rhidayat.work/series/crossplane/advanced/15-building-an-idp-with-backstage/</link><pubDate>Sun, 09 Aug 2026 19:40:00 +0000</pubDate><guid>https://rhidayat.work/series/crossplane/advanced/15-building-an-idp-with-backstage/</guid><description>We have built the APIs, the translation engine, the GitOps pipeline, and the security webhooks. But developers still have to write YAML to request a database. In this final episode, we integrate Crossplane with Backstage to create the ultimate Internal Developer Portal (IDP).</description></item><item><title>Crossplane Ep 14: Custom Composition Webhooks</title><link>https://rhidayat.work/series/crossplane/advanced/14-custom-composition-webhooks/</link><pubDate>Sun, 09 Aug 2026 19:30:00 +0000</pubDate><guid>https://rhidayat.work/series/crossplane/advanced/14-custom-composition-webhooks/</guid><description>OpenAPI schema validation (like &lt;code&gt;type: integer&lt;/code&gt;) is too basic for enterprise security. What if you need to enforce that a database&amp;rsquo;s storage size is an even number, or that the requested environment matches a specific regex? In this episode, we write a Kubernetes Validating Webhook in Go to intercept and inspect Crossplane Claims.</description></item><item><title>Crossplane Ep 13: Provider Families and Performance</title><link>https://rhidayat.work/series/crossplane/advanced/13-provider-family-and-performance/</link><pubDate>Sun, 09 Aug 2026 19:20:00 +0000</pubDate><guid>https://rhidayat.work/series/crossplane/advanced/13-provider-family-and-performance/</guid><description>If you install the monolithic &lt;code&gt;provider-aws&lt;/code&gt; package into a small EKS cluster, your Kubernetes API server might crash. AWS has over 1,000 resources, meaning Crossplane will inject 1,000 CRDs and run a massive Go controller in memory. In this episode, we learn how to architect high-performance Crossplane clusters using Provider Families.</description></item><item><title>Crossplane Ep 12: GitOps with ArgoCD and Crossplane</title><link>https://rhidayat.work/series/crossplane/advanced/12-gitops-with-argocd-and-crossplane/</link><pubDate>Sun, 09 Aug 2026 19:10:00 +0000</pubDate><guid>https://rhidayat.work/series/crossplane/advanced/12-gitops-with-argocd-and-crossplane/</guid><description>If you are running &lt;code&gt;kubectl apply -f my-database.yaml&lt;/code&gt; from your laptop, you are doing it wrong. In modern Platform Engineering, no human should ever talk directly to the Kubernetes API. In this episode, we configure ArgoCD to automatically deploy Crossplane XRs directly from a GitHub repository.</description></item><item><title>Crossplane Ep 11: Writing Composition Functions in Go</title><link>https://rhidayat.work/series/crossplane/advanced/11-writing-composition-functions-in-go/</link><pubDate>Sun, 09 Aug 2026 19:00:00 +0000</pubDate><guid>https://rhidayat.work/series/crossplane/advanced/11-writing-composition-functions-in-go/</guid><description>In Episode 10, we learned that Composition Functions allow us to escape the limitations of YAML. In this episode, we will write a custom Go program that dynamically generates an array of AWS Subnets based on a single integer provided by the Application Developer.</description></item><item><title>Pulumi Ep 15: Multi-Language Components (MLC)</title><link>https://rhidayat.work/series/pulumi/advanced/15-multi-language-components/</link><pubDate>Sun, 09 Aug 2026 16:40:00 +0000</pubDate><guid>https://rhidayat.work/series/pulumi/advanced/15-multi-language-components/</guid><description>In Episode 7, we built a reusable TypeScript ComponentResource. But what if the Data Science team wants to use your component in their Python IaC? Historically, they couldn&amp;rsquo;t. Pulumi Multi-Language Components (MLC) solves this by using gRPC to project your TypeScript code across all supported languages.</description></item><item><title>Pulumi Ep 14: Policy as Code with CrossGuard</title><link>https://rhidayat.work/series/pulumi/advanced/14-policy-as-code-with-crossguard/</link><pubDate>Sun, 09 Aug 2026 16:30:00 +0000</pubDate><guid>https://rhidayat.work/series/pulumi/advanced/14-policy-as-code-with-crossguard/</guid><description>In Terraform, enforcing security rules requires external tools like OPA (Open Policy Agent) and Rego. Pulumi provides a native Policy-as-Code engine called CrossGuard. In this episode, we will write TypeScript policies that act as a strict firewall, preventing developers from provisioning insecure infrastructure.</description></item><item><title>Pulumi Ep 13: Unit Testing Infrastructure (Jest)</title><link>https://rhidayat.work/series/pulumi/advanced/13-unit-testing-infrastructure/</link><pubDate>Sun, 09 Aug 2026 16:20:00 +0000</pubDate><guid>https://rhidayat.work/series/pulumi/advanced/13-unit-testing-infrastructure/</guid><description>Testing infrastructure usually means deploying it to a sandbox, waiting 15 minutes, running a bash script to ping an IP, and tearing it down. Because Pulumi is TypeScript, we can use the industry-standard Jest testing framework to write offline, millisecond unit tests to validate our infrastructure logic &lt;em&gt;before&lt;/em&gt; we ever touch the cloud.</description></item><item><title>CKS Deep Guide: Cluster Hardening &amp; Runtime Security</title><link>https://rhidayat.work/series/kubernetes-certification-path/cks/01-cks-cluster-hardening-and-runtime-security/</link><pubDate>Sun, 09 Aug 2026 16:15:00 +0000</pubDate><guid>https://rhidayat.work/series/kubernetes-certification-path/cks/01-cks-cluster-hardening-and-runtime-security/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;
 The &lt;strong&gt;Certified Kubernetes Security Specialist (CKS)&lt;/strong&gt; is the pinnacle performance exam testing your ability to secure containerized workloads, harden Kubernetes clusters, and detect runtime attacks.
&lt;/div&gt;</description></item><item><title>CKAD Deep Guide: Application Design &amp; Deployment Strategies</title><link>https://rhidayat.work/series/kubernetes-certification-path/ckad/01-ckad-application-design-and-deployment-strategies/</link><pubDate>Sun, 09 Aug 2026 16:10:00 +0000</pubDate><guid>https://rhidayat.work/series/kubernetes-certification-path/ckad/01-ckad-application-design-and-deployment-strategies/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;
 The &lt;strong&gt;Certified Kubernetes Application Developer (CKAD)&lt;/strong&gt; exam tests your ability to design, build, expose, and troubleshoot cloud-native applications running inside Kubernetes clusters.
&lt;/div&gt;</description></item><item><title>Pulumi Ep 12: Authoring Dynamic Providers</title><link>https://rhidayat.work/series/pulumi/advanced/12-dynamic-providers/</link><pubDate>Sun, 09 Aug 2026 16:10:00 +0000</pubDate><guid>https://rhidayat.work/series/pulumi/advanced/12-dynamic-providers/</guid><description>What happens when you need to provision a resource in a system that doesn&amp;rsquo;t have an official Pulumi plugin? In Terraform, you must write complex Go code, compile a binary, and distribute it. In Pulumi, you can author a Dynamic Provider directly in your &lt;code&gt;index.ts&lt;/code&gt; file using pure TypeScript.</description></item><item><title>CKA Deep Guide: Cluster Architecture, Installation &amp; etcd Backup</title><link>https://rhidayat.work/series/kubernetes-certification-path/cka/01-cka-cluster-architecture-installation-and-configuration/</link><pubDate>Sun, 09 Aug 2026 16:05:00 +0000</pubDate><guid>https://rhidayat.work/series/kubernetes-certification-path/cka/01-cka-cluster-architecture-installation-and-configuration/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;
 The &lt;strong&gt;Certified Kubernetes Administrator (CKA)&lt;/strong&gt; exam is a 100% performance-based practical exam. You must execute complex administrative tasks directly inside Linux terminal command lines within a 2-hour window.
&lt;/div&gt;</description></item><item><title>KCNA Deep Guide: Cloud Native Architecture &amp; Exam Mastery</title><link>https://rhidayat.work/series/kubernetes-certification-path/kcna/01-kcna-exam-guide-and-cloud-native-fundamentals/</link><pubDate>Sun, 09 Aug 2026 16:00:00 +0000</pubDate><guid>https://rhidayat.work/series/kubernetes-certification-path/kcna/01-kcna-exam-guide-and-cloud-native-fundamentals/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;
 The &lt;strong&gt;Kubernetes and Cloud Native Associate (KCNA)&lt;/strong&gt; certification tests your foundational understanding of the Cloud Native ecosystem, CNCF project landscape, and Kubernetes control plane mechanics.
&lt;/div&gt;</description></item><item><title>Pulumi Ep 11: The Automation API (Embedded Pulumi)</title><link>https://rhidayat.work/series/pulumi/advanced/11-automation-api/</link><pubDate>Sun, 09 Aug 2026 16:00:00 +0000</pubDate><guid>https://rhidayat.work/series/pulumi/advanced/11-automation-api/</guid><description>Running &lt;code&gt;pulumi up&lt;/code&gt; from a CLI is great for Platform Engineers, but what if you want to build a self-service Internal Developer Portal (IDP) where developers click a button on a web page to provision a database? The Pulumi Automation API allows you to embed the entire Pulumi Engine inside your own Node.js, Python, or Go applications.</description></item><item><title>TS Ep 70: Building a REST API with Effect</title><link>https://rhidayat.work/series/typescript/functional-effect/15-building-a-rest-api-with-effect/</link><pubDate>Sun, 09 Aug 2026 15:55:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/functional-effect/15-building-a-rest-api-with-effect/</guid><description>We assemble the ultimate functional backend. Learn how to combine Layers, Context, Schema Validation, Error Handling, and Resource Management into a massive, production-grade Express REST API using @effect/platform.</description></item><item><title>TS Ep 69: Managing Resources and Scope</title><link>https://rhidayat.work/series/typescript/functional-effect/14-resource-management-acquire-release/</link><pubDate>Sun, 09 Aug 2026 15:50:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/functional-effect/14-resource-management-acquire-release/</guid><description>Learn how to safely acquire and release resources like database connections and file streams. The Scope API replaces try/finally blocks, guaranteeing cleanup even if your application crashes.</description></item><item><title>TS Ep 68: Effect Schema Validation</title><link>https://rhidayat.work/series/typescript/functional-effect/13-effect-schema-validation/</link><pubDate>Sun, 09 Aug 2026 15:45:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/functional-effect/13-effect-schema-validation/</guid><description>TypeScript interfaces do not exist at runtime. To protect your application from malformed API payloads and corrupted database rows, learn how to use @effect/schema to parse and validate data perfectly.</description></item><item><title>TS Ep 67: Concurrency and Fibers</title><link>https://rhidayat.work/series/typescript/functional-effect/12-concurrency-and-fibers/</link><pubDate>Sun, 09 Aug 2026 15:40:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/functional-effect/12-concurrency-and-fibers/</guid><description>Learn how Effect-TS implements Fibers (green threads) to allow millions of concurrent operations. Master &lt;code&gt;Effect.all&lt;/code&gt;, concurrency limits, and safe interruption of background tasks.</description></item><item><title>TS Ep 66: Layers &amp; Service Wiring</title><link>https://rhidayat.work/series/typescript/functional-effect/11-layers-and-service-wiring/</link><pubDate>Sun, 09 Aug 2026 15:35:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/functional-effect/11-layers-and-service-wiring/</guid><description>Providing single services is easy, but enterprise applications have massive dependency graphs. Learn how to use Effect Layers to wire services together, handle async initialization, and resolve graphs perfectly.</description></item><item><title>TS Ep 65: Context &amp; Dependency Injection</title><link>https://rhidayat.work/series/typescript/functional-effect/10-context-and-dependency-injection/</link><pubDate>Sun, 09 Aug 2026 15:30:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/functional-effect/10-context-and-dependency-injection/</guid><description>Eliminate global singletons and complex IoC containers. Learn how the R parameter in Effect&amp;lt;A, E, R&amp;gt; forces you to provide dependencies before your program can run, ensuring perfect testability.</description></item><item><title>TS Ep 64: Error Handling in Effect</title><link>https://rhidayat.work/series/typescript/functional-effect/09-error-handling-in-effect/</link><pubDate>Sun, 09 Aug 2026 15:25:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/functional-effect/09-error-handling-in-effect/</guid><description>Effect-TS completely reimagines error handling. Learn the difference between Expected Failures and Unexpected Defects, and how to use &lt;code&gt;catchTag&lt;/code&gt; to build resilient, self-documenting pipelines.</description></item><item><title>TS Ep 63: Creating and Running Effects</title><link>https://rhidayat.work/series/typescript/functional-effect/08-creating-and-running-effects/</link><pubDate>Sun, 09 Aug 2026 15:20:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/functional-effect/08-creating-and-running-effects/</guid><description>To use Effect-TS, you must know how to bridge the gap between the chaotic outside world and your pure functional pipeline. Master the constructors and execution methods of the Effect runtime.</description></item><item><title>TS Ep 62: The Effect Type Signature</title><link>https://rhidayat.work/series/typescript/functional-effect/07-effect-type-signature/</link><pubDate>Sun, 09 Aug 2026 15:15:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/functional-effect/07-effect-type-signature/</guid><description>The heart of Effect-TS is its three-parameter type signature. Master the A (Success), E (Error), and R (Requirement) parameters to unlock perfect architectural safety.</description></item><item><title>TS Ep 61: Introduction to Effect-TS</title><link>https://rhidayat.work/series/typescript/functional-effect/06-introduction-to-effect-ts/</link><pubDate>Sun, 09 Aug 2026 15:10:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/functional-effect/06-introduction-to-effect-ts/</guid><description>We have built the functional foundation. Now it is time to enter the ecosystem. Discover why Effect-TS is rapidly becoming the standard library for enterprise TypeScript, and run your first pure asynchronous program.</description></item><item><title>TS Ep 60: Function Composition (Pipe &amp; Flow)</title><link>https://rhidayat.work/series/typescript/functional-effect/05-function-composition-pipe-flow/</link><pubDate>Sun, 09 Aug 2026 15:05:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/functional-effect/05-function-composition-pipe-flow/</guid><description>Learn how to avoid the &amp;lsquo;Pyramid of Doom&amp;rsquo; and method chaining limitations by embracing functional composition. We explore how &lt;code&gt;pipe&lt;/code&gt; and &lt;code&gt;flow&lt;/code&gt; allow you to build complex logic from small, testable pure functions.</description></item><item><title>TS Ep 59: Monadic Patterns (Option &amp; Either)</title><link>https://rhidayat.work/series/typescript/functional-effect/04-monadic-patterns-option-either/</link><pubDate>Sun, 09 Aug 2026 15:00:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/functional-effect/04-monadic-patterns-option-either/</guid><description>Learn how to wrap missing data and expected errors in type-safe containers. We explore the Option and Either monads, providing the final foundational step before entering the Effect-TS ecosystem.</description></item><item><title>TS Ep 58: Algebraic Data Types (ADTs)</title><link>https://rhidayat.work/series/typescript/functional-effect/03-algebraic-data-types-adt/</link><pubDate>Sun, 09 Aug 2026 14:55:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/functional-effect/03-algebraic-data-types-adt/</guid><description>Learn how to eliminate impossible states from your application by mastering Algebraic Data Types (ADTs). We explore Sum Types, Product Types, and exhaustive pattern matching in TypeScript.</description></item><item><title>TS Ep 57: Immutability &amp; Readonly Data</title><link>https://rhidayat.work/series/typescript/functional-effect/02-immutability-and-readonly-data/</link><pubDate>Sun, 09 Aug 2026 14:50:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/functional-effect/02-immutability-and-readonly-data/</guid><description>Functional programming requires data to be immutable. Discover how to leverage TypeScript&amp;rsquo;s structural typing, &lt;code&gt;Readonly&amp;lt;T&amp;gt;&lt;/code&gt;, and &lt;code&gt;as const&lt;/code&gt; to enforce deep immutability at compile time, eliminating a massive category of state-based bugs.</description></item><item><title>TS Ep 56: Functional Programming Basics &amp; Pure Functions</title><link>https://rhidayat.work/series/typescript/functional-effect/01-functional-programming-basics-pure-functions/</link><pubDate>Sun, 09 Aug 2026 14:45:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/functional-effect/01-functional-programming-basics-pure-functions/</guid><description>Welcome to the final module! Before diving into Effect-TS, we must build a foundation in Functional Programming. Learn why pure functions eliminate whole classes of bugs, how separating descriptions from execution powers the Effect runtime, and how to refactor impure services into highly testable functional pipelines.</description></item><item><title>TS Ep 4: Functional TypeScript &amp; Effect-TS Prelude — Immutability, ADTs, and Type-Driven Error Handling</title><link>https://rhidayat.work/series/typescript/functional-effect/04-functional-typescript-and-effect-foundation/</link><pubDate>Sun, 09 Aug 2026 14:00:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/functional-effect/04-functional-typescript-and-effect-foundation/</guid><description>The functional programming masterclass for TypeScript developers. Bridge object-oriented patterns into pure functional architecture with Option/Either types, typed error handling without throw exceptions, pipe/flow composition, and an introduction to the Effect-TS ecosystem.</description></item><item><title>TS Ep 55: Advanced Function Composition</title><link>https://rhidayat.work/series/typescript/advanced/15-advanced-function-composition-typing/</link><pubDate>Sun, 09 Aug 2026 13:45:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/advanced/15-advanced-function-composition-typing/</guid><description>How do you type a pipe() function that takes an infinite number of functions, where the output of function A must perfectly match the input of function B? Welcome to the final boss of TypeScript.</description></item><item><title>TS Ep 54: The Builder Pattern with Generics</title><link>https://rhidayat.work/series/typescript/advanced/14-builder-pattern-with-generics/</link><pubDate>Sun, 09 Aug 2026 13:40:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/advanced/14-builder-pattern-with-generics/</guid><description>Learn how to build chainable APIs that accumulate type knowledge at every step. This Generic Accumulator pattern is the secret engine powering libraries like tRPC, Zod, and Prisma, providing unparalleled autocomplete.</description></item><item><title>TS Ep 53: Branding and Flavoring (Nominal Typing)</title><link>https://rhidayat.work/series/typescript/advanced/13-branding-and-flavoring-nominal-typing/</link><pubDate>Sun, 09 Aug 2026 13:35:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/advanced/13-branding-and-flavoring-nominal-typing/</guid><description>TypeScript doesn&amp;rsquo;t care if two types have different names; if they share the same shape, they are equivalent. Learn how to use Branding and Flavoring to force the compiler to differentiate between an OrderID string and a UserID string, powering Domain-Driven Design.</description></item><item><title>TS Ep 3: Advanced TypeScript — Conditional Types, Infer Keyword, and Template Literal Metaprogramming</title><link>https://rhidayat.work/series/typescript/advanced/03-conditional-types-infer-and-template-literals/</link><pubDate>Sun, 09 Aug 2026 13:30:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/advanced/03-conditional-types-infer-and-template-literals/</guid><description>An advanced masterclass in TypeScript type-level metaprogramming. Master conditional types (T extends U ? X : Y), distributive behavior, infer keyword pattern matching for unwrapping types, template literal types (${T}_${U}), and deep recursive object transformations.</description></item><item><title>TS Ep 52: Variance (Covariance vs Contravariance)</title><link>https://rhidayat.work/series/typescript/advanced/12-variance-covariance-contravariance/</link><pubDate>Sun, 09 Aug 2026 13:30:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/advanced/12-variance-covariance-contravariance/</guid><description>Why is it safe to return a subclass instead of a superclass, but dangerous to accept a superclass parameter instead of a subclass? Welcome to Variance: the computer science underpinning of TypeScript&amp;rsquo;s assignability engine.</description></item><item><title>TS Ep 51: Type-Level State Machines</title><link>https://rhidayat.work/series/typescript/advanced/11-type-level-state-machines/</link><pubDate>Sun, 09 Aug 2026 13:25:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/advanced/11-type-level-state-machines/</guid><description>Use mapped types and generics to enforce finite state transitions in the compiler. A type-level state machine makes impossible states impossible to represent, eliminating entire classes of runtime bugs.</description></item><item><title>TS Ep 50: DeepReadonly and DeepPartial</title><link>https://rhidayat.work/series/typescript/advanced/10-deep-readonly-and-deep-partial/</link><pubDate>Sun, 09 Aug 2026 13:20:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/advanced/10-deep-readonly-and-deep-partial/</guid><description>The built-in &lt;code&gt;Partial&lt;/code&gt; and &lt;code&gt;Readonly&lt;/code&gt; utilities are shallow. Learn how to write your own &lt;code&gt;DeepReadonly&lt;/code&gt; and &lt;code&gt;DeepPartial&lt;/code&gt; utilities that penetrate every layer of nested objects by combining Generics, Conditionals, &lt;code&gt;infer&lt;/code&gt;, Mapped Types, and Recursion simultaneously.</description></item><item><title>TS Ep 49: Recursive Types</title><link>https://rhidayat.work/series/typescript/advanced/09-recursive-types/</link><pubDate>Sun, 09 Aug 2026 13:15:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/advanced/09-recursive-types/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;
 How do you type a JSON object? A JSON object can contain arrays of objects, which can contain arrays of objects, infinitely down. You cannot hardcode this depth. You need a &lt;strong&gt;Recursive Type&lt;/strong&gt;.
&lt;/div&gt;</description></item><item><title>TS Ep 48: String Manipulation Utilities</title><link>https://rhidayat.work/series/typescript/advanced/08-string-manipulation-utilities/</link><pubDate>Sun, 09 Aug 2026 13:10:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/advanced/08-string-manipulation-utilities/</guid><description>TypeScript provides four built-in Intrinsic utilities that manipulate the casing of string literal types at compile time. Learn how to pair them with template literals and mapped types to dynamically generate robust event handler mappings.</description></item><item><title>TS Ep 47: Template Literal Types</title><link>https://rhidayat.work/series/typescript/advanced/07-template-literal-types/</link><pubDate>Sun, 09 Aug 2026 13:05:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/advanced/07-template-literal-types/</guid><description>Template literal types allow you to use JavaScript-style template strings (&lt;code&gt;${...}&lt;/code&gt;) inside Type Space. Learn how to generate combinations of string literals automatically via Union Permutation, and parse delimited strings (like emails or URLs) using the &lt;code&gt;infer&lt;/code&gt; keyword.</description></item><item><title>TS Ep 46: Inferring Tuples and Arrays</title><link>https://rhidayat.work/series/typescript/advanced/06-infer-with-tuples-and-arrays/</link><pubDate>Sun, 09 Aug 2026 13:00:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/advanced/06-infer-with-tuples-and-arrays/</guid><description>Pattern matching with &lt;code&gt;infer&lt;/code&gt; isn&amp;rsquo;t just for Promises and Objects. You can deconstruct Tuples and Arrays element by element in Type Space, mirroring the exact syntax of JavaScript&amp;rsquo;s array destructuring and spread operators.</description></item><item><title>TS Ep 45: Inferring Promises (`Awaited`)</title><link>https://rhidayat.work/series/typescript/advanced/05-infer-with-promises-awaited/</link><pubDate>Sun, 09 Aug 2026 12:55:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/advanced/05-infer-with-promises-awaited/</guid><description>Learn how the built-in &lt;code&gt;Awaited&amp;lt;T&amp;gt;&lt;/code&gt; utility models the runtime &lt;code&gt;await&lt;/code&gt; keyword. We explore how to combine the &lt;code&gt;infer&lt;/code&gt; keyword with Recursive Type Aliases to drill down and unwrap Promises infinitely deep, and how to compose it with &lt;code&gt;ReturnType&lt;/code&gt; for async functions.</description></item><item><title>TS Ep 44: The `infer` Keyword (Pattern Matching)</title><link>https://rhidayat.work/series/typescript/advanced/04-the-infer-keyword/</link><pubDate>Sun, 09 Aug 2026 12:50:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/advanced/04-the-infer-keyword/</guid><description>If conditional types are the if-else statements of Type Space, the &lt;code&gt;infer&lt;/code&gt; keyword is the variable declaration (&lt;code&gt;let x = ...&lt;/code&gt;). Learn how to extract types dynamically via pattern matching, rebuild &lt;code&gt;ReturnType&lt;/code&gt;, and parse Template Literal Strings at compile time.</description></item><item><title>TS Ep 43: Preventing Distribution (Tuples)</title><link>https://rhidayat.work/series/typescript/advanced/03-preventing-distribution/</link><pubDate>Sun, 09 Aug 2026 12:45:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/advanced/03-preventing-distribution/</guid><description>Sometimes, you want a conditional type to evaluate an entire Union as a single monolithic entity, rather than mapping over its individual members. Learn how wrapping generic parameters in brackets &lt;code&gt;[T]&lt;/code&gt; prevents distribution, and how to use this mechanic to build complex &lt;code&gt;IsUnion&lt;/code&gt; checks.</description></item><item><title>TS Ep 42: Distributive Conditional Types</title><link>https://rhidayat.work/series/typescript/advanced/02-distributive-conditional-types/</link><pubDate>Sun, 09 Aug 2026 12:40:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/advanced/02-distributive-conditional-types/</guid><description>When you pass a Union type into a conditional type, TypeScript doesn&amp;rsquo;t evaluate the union as a whole. It evaluates every single member of the union separately, and combines the results. Learn how this powerful (and sometimes confusing) mechanism powers TypeScript&amp;rsquo;s standard library.</description></item><item><title>TS Ep 41: Conditional Types (The Basics)</title><link>https://rhidayat.work/series/typescript/advanced/01-conditional-types-basics/</link><pubDate>Sun, 09 Aug 2026 12:35:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/advanced/01-conditional-types-basics/</guid><description>Conditional types are the if-else statements of Type Space. Learn how to use the &amp;rsquo;extends ? :&amp;rsquo; syntax to compute dynamic types based on assignability logic, replace complex function overloads, and construct nested else-if type chains.</description></item><item><title>Mastering TypeScript: From Fundamentals to Type-Level Programming &amp; Functional Effect-TS</title><link>https://rhidayat.work/series/typescript/</link><pubDate>Sun, 09 Aug 2026 12:00:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/</guid><description>The ultimate TypeScript masterclass roadmap. Master primitive types, type narrowing, generics, mapped types, conditional types, infer keyword, template literal types, type-level state machines, and functional Effect-TS architecture.</description></item><item><title>Terraform Ep 15: Infrastructure Unit Testing with Terratest (Golang)</title><link>https://rhidayat.work/series/terraform/advanced/15-testing-with-terratest/</link><pubDate>Sun, 09 Aug 2026 11:40:00 +0000</pubDate><guid>https://rhidayat.work/series/terraform/advanced/15-testing-with-terratest/</guid><description>Running &amp;rsquo;terraform plan&amp;rsquo; is not enough to guarantee your infrastructure works. In this final episode, we bridge the gap between DevOps and Software Engineering by writing automated Golang tests using Terratest. We will programmatically provision infrastructure, assert its correctness, and tear it down.</description></item><item><title>Terraform Ep 14: Achieving DRY Architecture with Terragrunt</title><link>https://rhidayat.work/series/terraform/advanced/14-terragrunt-and-dry-architecture/</link><pubDate>Sun, 09 Aug 2026 11:30:00 +0000</pubDate><guid>https://rhidayat.work/series/terraform/advanced/14-terragrunt-and-dry-architecture/</guid><description>As your Terraform codebase scales across dozens of microservices and environments, you will find yourself copy-pasting the same &amp;lsquo;backend&amp;rsquo; and &amp;lsquo;provider&amp;rsquo; blocks repeatedly. Terragrunt is a powerful wrapper that eliminates this repetition, allowing you to define global configurations once.</description></item><item><title>Terraform Ep 13: Advanced State Manipulation (Surgical Refactoring)</title><link>https://rhidayat.work/series/terraform/advanced/13-advanced-state-manipulation/</link><pubDate>Sun, 09 Aug 2026 11:20:00 +0000</pubDate><guid>https://rhidayat.work/series/terraform/advanced/13-advanced-state-manipulation/</guid><description>Refactoring HCL code is dangerous. If you rename a resource block, Terraform will attempt to destroy the old resource and recreate it. In this episode, we learn how to use &amp;lsquo;moved&amp;rsquo; blocks and the state CLI to refactor code safely, preventing catastrophic database deletions.</description></item><item><title>Terraform Ep 12: CI/CD Automation with Terraform Cloud and GitHub Actions</title><link>https://rhidayat.work/series/terraform/advanced/12-cicd-with-terraform-cloud/</link><pubDate>Sun, 09 Aug 2026 11:10:00 +0000</pubDate><guid>https://rhidayat.work/series/terraform/advanced/12-cicd-with-terraform-cloud/</guid><description>Running &amp;rsquo;terraform apply&amp;rsquo; from a local laptop is a major security and compliance risk. In this episode, we transition to a GitOps workflow. You will learn how to automate Terraform plans on Pull Requests, and automatically apply changes upon merging to the main branch using GitHub Actions.</description></item><item><title>Terraform Ep 11: Managing Multi-Environment Architecture (Workspaces vs Directories)</title><link>https://rhidayat.work/series/terraform/advanced/11-workspaces-and-environments/</link><pubDate>Sun, 09 Aug 2026 11:00:00 +0000</pubDate><guid>https://rhidayat.work/series/terraform/advanced/11-workspaces-and-environments/</guid><description>Welcome to Tier 3: Advanced Platform Engineering. You now know how to write reusable modules and store state remotely. But how do you safely deploy identical infrastructure to both Staging and Production without them colliding? We explore Workspaces and Directory Isolation.</description></item><item><title>Go Ep 15: Building a Production REST API</title><link>https://rhidayat.work/series/go/15-building-a-production-rest-api/</link><pubDate>Sun, 09 Aug 2026 10:20:00 +0000</pubDate><guid>https://rhidayat.work/series/go/15-building-a-production-rest-api/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;
 Theory is useless without execution. We assemble everything learned across 14 episodes — structs, pointers, error handling, JSON codecs, context timeouts, and concurrency — into a production-grade HTTP REST API.
&lt;/div&gt;</description></item><item><title>Go Ep 14: Testing, Benchmarking &amp; Fuzzing</title><link>https://rhidayat.work/series/go/14-unit-testing-benchmarking-fuzzing/</link><pubDate>Sun, 09 Aug 2026 10:10:00 +0000</pubDate><guid>https://rhidayat.work/series/go/14-unit-testing-benchmarking-fuzzing/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;
 Go includes a first-class test runner built into the &lt;code&gt;go test&lt;/code&gt; CLI. You don&amp;rsquo;t need external test frameworks like Jest or JUnit to write unit tests, benchmarks, or fuzzers.
&lt;/div&gt;</description></item><item><title>Go Ep 13: Generics (Type Parameters)</title><link>https://rhidayat.work/series/go/13-generics-in-go/</link><pubDate>Sun, 09 Aug 2026 10:00:00 +0000</pubDate><guid>https://rhidayat.work/series/go/13-generics-in-go/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;
 Before Go 1.18, writing a reusable function for finding a slice element required duplicate functions for &lt;code&gt;int&lt;/code&gt;, &lt;code&gt;string&lt;/code&gt;, and &lt;code&gt;float64&lt;/code&gt;, or using reflection. &lt;strong&gt;Generics&lt;/strong&gt; solve this using Type Parameters.
&lt;/div&gt;</description></item><item><title>Go Ep 12: Context, Cancellation &amp; Timeouts</title><link>https://rhidayat.work/series/go/12-context-cancellation-and-timeouts/</link><pubDate>Sun, 09 Aug 2026 09:50:00 +0000</pubDate><guid>https://rhidayat.work/series/go/12-context-cancellation-and-timeouts/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;
 When an incoming HTTP request is cancelled by the client, every downstream database query and RPC call associated with that request must stop immediately. Go&amp;rsquo;s &lt;strong&gt;&lt;code&gt;context.Context&lt;/code&gt;&lt;/strong&gt; enforces this cancellation propagation.
&lt;/div&gt;</description></item><item><title>Go Ep 11: Advanced Concurrency &amp; Worker Pools</title><link>https://rhidayat.work/series/go/11-advanced-concurrency-patterns/</link><pubDate>Sun, 09 Aug 2026 09:40:00 +0000</pubDate><guid>https://rhidayat.work/series/go/11-advanced-concurrency-patterns/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;
 Channel communication handles message passing, but shared memory synchronization requires standard primitives like &lt;code&gt;sync.Mutex&lt;/code&gt; and &lt;code&gt;sync.WaitGroup&lt;/code&gt;. Learn how to build thread-safe concurrent systems.
&lt;/div&gt;</description></item><item><title>Kratix Ep 1: Introduction to Kratix &amp; The Platform-as-a-Product Paradigm</title><link>https://rhidayat.work/series/kratix/01-introduction-to-kratix/</link><pubDate>Sun, 09 Aug 2026 00:00:00 +0000</pubDate><guid>https://rhidayat.work/series/kratix/01-introduction-to-kratix/</guid><description>Explore Kratix architecture, the Platform-as-a-Product paradigm, and how Kratix transforms Kubernetes into a composable Internal Developer Platform.</description></item><item><title>Mastering Kratix: Building Composable Internal Developer Platforms on Kubernetes</title><link>https://rhidayat.work/series/kratix/</link><pubDate>Sun, 09 Aug 2026 00:00:00 +0000</pubDate><guid>https://rhidayat.work/series/kratix/</guid><description>Master Kratix to deliver self-service infrastructure and application capabilities to development teams with Promises, Workflows, Pipelines, and GitOps.</description></item></channel></rss>