Walk-Throughs
Migrating from Heroku to AWS: A 2026 Playbook
An updated playbook for migrating Heroku applications to AWS, drawing on lessons from the Firstech migration and several engagements since. The mechanics have stabilized; the tradeoffs have shifted.
Self-Hosting WordPress on AWS: Three Architectures Compared
We've helped clients run WordPress on AWS in three distinct architectures: Lightsail for simplicity, our marketplace pattern for production workloads, and fully custom designs for the largest sites. Here's an honest comparison of where each fits.
GitOps with CloudFormation: How We Run It
GitOps usually gets discussed in the context of Kubernetes. We've been running a GitOps approach with CloudFormation for years across our marketplace patterns and client engagements - here's the structure that works.
Adding Amazon Q Developer to Your CodePipeline
A practical walk-through for putting Amazon Q Developer to work inside CodePipeline - reviewing CloudFormation diffs in pull requests, flagging IAM regressions, and where we draw the line between assistance and automation.
Using Amazon Q Developer to Write CloudFormation
Amazon Q Developer is a useful pair-programmer for CloudFormation, but it has rough edges around recent API changes and IAM scoping. Here's how we've been integrating it into our IaC workflow.
Ordinary Experts achieves AWS CloudFormation Service Delivery Designation
Ordinary Experts attains AWS CloudFormation Service Delivery Designation - showcasing our proven ability to deliver advanced CloudFormation based AWS solutions.
Evolution of a S3 Bucket in CloudFormation
In this blog, we'll walk through setting up a S3 bucket with CloudFormation. We'll start with a simple resource and work up to a more real-life example with support for versioning, encryption, and preventing any objects from becoming public.
Static S3 Website with CICD - Walkthrough
We have developed a Terraform module for AWS which provisions a static website that: is serverless, enforces SSL, encrypts data at rest and in transit, is globally distributed, supports restricting access to website by IP, sets up nice DNS entries, deploys new changes when commits are pushed to a CodeCommit branch, clears the CloudFront cache after deployments, sends notifications on successful and failed deploys, supports site generation frameworks like Hugo or Jekyll, supports URLs of subdirectories that do not have index.html specified, supports custom error pages, and supports debug mode. Check it out!
Better CodePipeline S3 Source Metadata
By setting the 'codepipeline-artifact-revision-summary' metadata key when uploading a build artifact to S3, you can get nicer source metadata information from AWS CodePipeline.
Git Flow, Semantic Versioning, and CHANGELOG.md, oh my!
In this post, we discuss Git Flow, Semantic Versioning, and Keep a changelog, and then provide a complete walk-through of how we would apply them to a typical software development project.