<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Automation on ferkakta.dev</title><link>https://ferkakta.dev/tags/automation/</link><description>Recent content in Automation on ferkakta.dev</description><generator>Hugo</generator><language>en-US</language><copyright>Copyright fizz.</copyright><lastBuildDate>Tue, 03 Mar 2026 09:00:00 -0600</lastBuildDate><atom:link href="https://ferkakta.dev/tags/automation/index.xml" rel="self" type="application/rss+xml"/><item><title>From eight manual steps to one command</title><link>https://ferkakta.dev/eight-manual-steps-to-one-command/</link><pubDate>Tue, 03 Mar 2026 09:00:00 -0600</pubDate><guid>https://ferkakta.dev/eight-manual-steps-to-one-command/</guid><description>&lt;p&gt;I provisioned two tenants by hand before I decided that nobody should ever provision a tenant by hand.&lt;/p&gt;
&lt;p&gt;The provisioning flow for our multi-tenant SaaS platform was 8 steps across 4 tools — a Python CLI, a shell script with 5 flags per invocation, a GitHub Actions workflow, and two Kubernetes job manifests requiring injected DB connection strings. Each step had different inputs, different env files, and subtly different flag names for the same concept. The two &lt;code&gt;populate&lt;/code&gt; runs used &lt;code&gt;--appname apiserver&lt;/code&gt; and &lt;code&gt;--appname tenant_auth_service&lt;/code&gt; — note the underscore in one and not the other. That naming inconsistency is a guaranteed typo on a Friday afternoon. Each flag is a chance to silently write 24 SSM parameters to the wrong path.&lt;/p&gt;</description></item><item><title>Your onboarding flow is your architecture's report card</title><link>https://ferkakta.dev/onboarding-flow-architecture-report-card/</link><pubDate>Tue, 03 Mar 2026 00:00:00 +0000</pubDate><guid>https://ferkakta.dev/onboarding-flow-architecture-report-card/</guid><description>&lt;p&gt;I ran a colleague&amp;rsquo;s manual tenant onboarding flow for a multi-tenant SaaS platform. Five steps, two attempts, and a list of errors that mapped precisely to every automation gap in the system. The onboarding flow wasn&amp;rsquo;t broken. It was a diagnostic.&lt;/p&gt;
&lt;h2 id="the-five-steps"&gt;The five steps&lt;/h2&gt;
&lt;p&gt;The flow to bring a new tenant from nothing to working:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Run a Python registration script that calls the auth-handler API, creates an org in the identity provider, and sends a confirmation email to the devops team.&lt;/li&gt;
&lt;li&gt;Read the devops email. Manually extract two values: a tenant hash and an org code.&lt;/li&gt;
&lt;li&gt;Run populate scripts that seed 38 SSM parameters — 24 for &lt;code&gt;apiserver&lt;/code&gt;, 14 for &lt;code&gt;tenant-auth-service&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Trigger a GitHub Actions workflow. Terraform creates the namespace, deployments, ExternalSecrets, DNS records, HTTPS.&lt;/li&gt;
&lt;li&gt;Manually apply Kubernetes jobs for ETL seed data and first-user creation.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Step 4 is automated. Steps 1, 2, 3, and 5 are manual. The manual steps are where the architecture&amp;rsquo;s seams show.&lt;/p&gt;</description></item></channel></rss>