[{"data":1,"prerenderedAt":152},["Reactive",2],{"work-software-toolkit":3,"work-next-software-toolkit":149},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":8,"description":7,"kicker":9,"summary":10,"cover":11,"coverSmall":12,"coverAlt":13,"role":14,"where":15,"stack":16,"usedBy":21,"stats":22,"next":29,"order":30,"body":31,"_type":143,"_id":144,"_source":145,"_file":146,"_stem":147,"_extension":148},"/work/software-toolkit","work",false,"","Software Toolkit","Internal product · Storm Reply","A Terraform scaffold that provisions serverless infrastructure, mocks APIs locally with AWS SAM and gives every developer their own sandbox per branch.","/3d/cover-software-toolkit.webp","/3d/cover-software-toolkit-640.webp","Clay model of a stack of slabs with a teal branch leading to a smaller sandbox slab","Built it, lead the guild that owns it","Storm Reply UK",[17,18,19,20],"Terraform","AWS SAM","Python","GitHub Actions","20+ engineers",[23,26],{"value":24,"label":25},"20+","engineers using it",{"value":27,"label":28},"2 weeks → hours","new project setup","agentic-delivery-platform",1,{"type":32,"children":33,"toc":140},"root",[34,62,126],{"type":35,"tag":36,"props":37,"children":39},"element","case-section",{"label":38},"The problem",[40,47,52,57],{"type":35,"tag":41,"props":42,"children":43},"p",{},[44],{"type":45,"value":46},"text","Setting up a new project used to take about two weeks before anyone wrote a feature: infrastructure, pipelines, environments and a way to test the API locally.",{"type":35,"tag":41,"props":48,"children":49},{},[50],{"type":45,"value":51},"Every project started it again from scratch. Someone copied the Terraform from the last engagement, pulled out the parts that belonged to that client, and spent the first sprint getting a pipeline to deploy anything at all. By the end of it no two projects looked alike, so nothing learned on one of them moved to the next.",{"type":35,"tag":41,"props":53,"children":54},{},[55],{"type":45,"value":56},"Testing infrastructure was the worse half. A Lambda behind API Gateway is awkward to exercise on a laptop, so the loop was to push a change, wait for the pipeline, and read CloudWatch. That is minutes of waiting to find a typo. And because everyone shared the same deployed environment, two people changing infrastructure at the same time meant one apply landing on top of the other, or a state lock held by whoever started first. The workaround was to take turns, which is a queue rather than a fix.",{"type":35,"tag":41,"props":58,"children":59},{},[60],{"type":45,"value":61},"The toolkit makes the fixes the default. One scaffold, SAM for the local loop, and a stack per branch so nobody waits on anyone.",{"type":35,"tag":36,"props":63,"children":66},{"label":64,"gap":65},"How it works","steps",[67,78,88,116],{"type":35,"tag":68,"props":69,"children":72},"case-step",{"number":70,"title":71},"1","Scaffold the serverless basics",[73],{"type":35,"tag":41,"props":74,"children":75},{},[76],{"type":45,"value":77},"Twelve Terraform modules cover the building blocks of a serverless app, and a wizard scaffolds each new API endpoint so every project starts from the same shape.",{"type":35,"tag":68,"props":79,"children":82},{"number":80,"title":81},"2","Run the API locally",[83],{"type":35,"tag":41,"props":84,"children":85},{},[86],{"type":45,"value":87},"AWS SAM runs the API on your machine against the same Terraform code that deploys it.",{"type":35,"tag":68,"props":89,"children":93},{"number":90,"title":91,"accent":92},"3","A sandbox for every branch","true",[94,108],{"type":35,"tag":41,"props":95,"children":96},{},[97,99,106],{"type":45,"value":98},"The branch name is hashed into its own Terraform state, so anyone can run ",{"type":35,"tag":100,"props":101,"children":103},"code",{"className":102},[],[104],{"type":45,"value":105},"terraform apply",{"type":45,"value":107}," from their laptop without touching anyone else's stack.",{"type":35,"tag":109,"props":110,"children":111},"template",{"v-slot:extra":7},[112],{"type":35,"tag":113,"props":114,"children":115},"branch-diagram",{},[],{"type":35,"tag":68,"props":117,"children":120},{"number":118,"title":119},"4","Keep it tidy",[121],{"type":35,"tag":41,"props":122,"children":123},{},[124],{"type":45,"value":125},"aws-nuke clears out abandoned sandboxes, and Checkov, tflint and pre-commit hooks run on every change.",{"type":35,"tag":36,"props":127,"children":129},{"label":128},"Results",[130,135],{"type":35,"tag":131,"props":132,"children":134},"case-stats",{":items":133},"[{\"value\":\"2 weeks → hours\",\"label\":\"to set up a new project\"},{\"value\":\"20+\",\"label\":\"engineers use it\"},{\"value\":\"Most used\",\"label\":\"internal tool at Storm Reply UK\"}]",[],{"type":35,"tag":41,"props":136,"children":137},{},[138],{"type":45,"value":139},"It's also what the company's internal Promotion App, for goals and feedback, was built on.",{"title":7,"searchDepth":141,"depth":141,"links":142},2,[],"markdown","content:work:software-toolkit.md","content","work/software-toolkit.md","work/software-toolkit","md",{"_path":150,"title":151},"/work/agentic-delivery-platform","Agentic delivery platform",1789325965341]