At Blackstack, we work with many different tech stacks and deployment workflows, always adapting to our customers’ existing environments.
Over the years, we’ve developed what we see as our ideal deployment stack—a setup that balances speed, safety, and simplicity. It’s not a one-size-fits-all solution, but a blueprint we aim for when provided with a no-preference greenfield project.
Here’s a look at what this ideal stack includes, and why we think it works so well. 👇
🛠️ The stack
GitHub for code hosting and GitHub Actions for CI/CD – this combo gives us full control over the workflow close to the source.
Terraform for infrastructure management – infrastructure as code lets us keep environments consistent and track changes easily.
📋 The deployment pipeline
Each deployment follows a consistent flow focused on quality and control:
✅ Unit tests – Every change triggers GitHub Actions to run a coverage-complete suite of unit tests, catching errors early.
📦 Staging deployment and integration tests – If unit tests pass, code moves to a staging environment where integration tests ensure system-wide stability.
🎁 Production readiness – After all tests pass, GitHub Actions packages build assets as artifacts and sends a Slack prompt to the team, enabling a final review before one-click deployment to production.
🔄 Our preferred git workflow
We encourage a trunk-based Git workflow. It keeps the main branch stable and reduces merge conflicts, letting us build in tiny, incremental, non-breaking changes.
🔹 Small, frequent, non-breaking commits – We push small updates often, which helps us keep momentum high, troubleshoot easily, and avoid risky, large merges.
🔹 Feature flags for bigger updates – If a feature needs to stay hidden until a future release, we still use trunk-based development but apply feature flags. This keeps large changes integrated without exposing them to users too early.
💡 Why this setup works for us
This setup keeps our pipeline lean and reliable, empowering developers to deploy frequently with confidence. Automated testing and Slack-driven release control maintain devlopment velocity at an optimum.
🤝 Adapting to customer workflows
While this is our ideal setup, we know each customer’s needs are unique. We work closely with customers to understand their tools and workflows, sometimes integrating with Jenkins or CodePipeline instead of GitHub Actions, adopting GitFlow instead of trunk-based, or using CloudFormation instead of Terraform, or adding Kubernetes to the mix. Our aim is to combine the efficiency of our ideal setup with the realities of each customer’s environment.
👋 What does your ideal deployment stack look like?
For us, it’s all about balancing best practices with the practical needs of each project. What does your ideal stack look like, and how do you adapt it to meet the needs of your team or customers?
Contact us below 👇 to have a chat!