Choosing a cloud stack today is not only about technology — it is about trade-offs, scalability, and long-term flexibility. In this post, I explain the infrastructure decisions behind our platform: why we chose AWS over simpler PaaS alternatives, why we adopted CDK as our Infrastructure as Code solution, and how GitHub Actions fits into our CI/CD strategy. I also share the reasoning behind our serverless-first approach using ECS, Fargate, Lambda, RDS, and pgvector, plus one architectural doubt that still remains open: ECS vs EKS. If you are building modern cloud infrastructure and balancing simplicity, scalability, and maintainability, this may resonate with your own experience.
As an IT company, or anyone building a product using agentic coding, you want to keep risk as close to 0 as possible. The product should not fail, it should be trustworthy, and at the same time it should be built as fast as possible. The same tradeoff we study in portfolio management appears here as well: lower risk usually means lower profitability, while higher profitability comes with higher risk. And I really think this framework fits the agentic coding discussion surprisingly well.
This week’s blog post is about something we rarely discuss enough in tech leadership:
The emotional side of scope negotiation.
Building products is not only about architecture, estimations, or delivery plans.
It is also about listening, adapting, reading people, and finding alignment between business expectations and technical reality.
After weeks understanding the business, defining modules, and shaping the MVP, we finally reached the difficult conversations:
What is truly essential?
What can wait?
Where is the real red line?
Sometimes reducing scope is not failure.
Sometimes it is exactly what gives a project a real chance to succeed.
Another week building AI products made one thing clear: SaaS alone is not enough—data is the real differentiator. While interfaces and LLM features are easy to replicate, unique data is not. Building it is harder, less visible, but ultimately what creates lasting value.
This week brought something different from the usual client work: I delivered a workshop in Logroño on Agentic Architectures — how to build apps powered by agents — to around 30 people from the local IT community. I also navigated two other challenges: helping a talented ML-focused team member get unstuck on a RAG implementation by pairing him with a seasoned app developer, and pushing a client to replace their shared-passwords Excel file with a proper password manager (slow progress, but moving in the right direction).
A week focused on AI agentic architecture, Semantic Kernel, LangChain4j, RAGAS, and practical business challenges with Shopify and Meta. Reflections on where software engineering fits in the new AI era.
A reflection on the first week of building an AI-driven retail product: from shaping a lean team and defining the first `showable` version, to letting go of control and embracing uncertainty in early-stage development
How we cleaned and deduplicated products across multiple Shopify stores during an ERP rollout—normalizing data, generating SKUs, merging catalogs safely, and protecting live revenue operations.
In this post, I’ll share key insights to help you avoid the same pitfalls we faced—because trust me, losing hours over misconfigured runtime variables is no fun!
After being tasked with modernizing our CI/CD process, we developed a straightforward approach that significantly improved efficiency. Using a simple "Hello World" Next.js app as a reference, I realized this method could be applied across multiple technologies
Build a professional landing page by creating content, designing a palette and logo, hosting on Vercel, linking analytics and social profiles, customizing an Astro.js template, and deploying seamlessly.
In this guide, we explored the various methods to expose a Kubernetes deployment. To enhance our setup, we will integrate the AWS Load Balancer Controller, enabling the management of advanced AWS Load Balancers.
This diagram illustrates the deployment of a Kubernetes application using AWS EC2 instances and the AWS Cloud Controller Manager (CCM). The EC2 instance, labeled as a 'K8S Node,' hosts the hello-world-lb deployment, which is exposed through a Kubernetes service configured as a LoadBalancer type. The AWS CCM interacts with the EC2 instance, enabling it to manage AWS resources like the AWS Classic Load Balancer. Security Groups are configured to allow traffic from the Load Balancer to the K8S service. The integration allows seamless connectivity between the user, AWS Load Balancer, and the Kubernetes pod running within the EC2 instance.
Kubernetes is not only a container orchestrator. It also serves as an infrastructure abstraction, and when embraced, it clearly defines responsibilities,
Contratar a un CTO/técnico independiente que gestione el tiempo parcial para poder mantener los conocimientos técnicos y la calidad del código es esencial.