Presenters

Source

Unlocking Modern Software: Workflows, Microservices, and the Art of Developer Sanity 🚀

Hey fellow tech enthusiasts! Ever feel like the world of software development is a constantly shifting maze? You’re not alone. In a recent GoTo podcast, James Bzik, Head of Developer Relations, and Ben, a Staff Developer Advocate at Stripe, pulled back the curtain on the critical shifts happening in our industry. They dove deep into workflows, microservices, and extensibility, offering a masterclass on navigating the complexities of modern, distributed cloud environments. Get ready to level up your understanding!

I. Workflows: Your Secret Weapon for Sanity 💡

The core message? Workflows are not just another buzzword; they’re a fundamental shift in how we build resilient, scalable systems. Ben laid out some compelling reasons why every developer should be embracing them:

  • Reduced Code Management: Imagine significantly less boilerplate. Workflows, especially those with visual drag-and-drop interfaces (beyond just SDKs), dramatically cut down the code you need to write and maintain.
  • Serverless Scalability & Cost Efficiency: Many workflow services operate on a pay-per-use, serverless model. This means they automatically scale with your business needs, optimizing costs without you lifting a finger.
  • Microservice Decoupling: Workflows are the glue that holds a microservices architecture together, effectively decoupling processes and ensuring services can evolve independently.
  • Distributed System Resilience: This is where workflows truly shine. They expertly handle the “long-tail problems” of distributed systems:
    • Idempotency: Ensuring operations process only once, even amidst network glitches.
    • Custom Error Flows: Orchestrating graceful rollbacks and cancellations when things go wrong.
  • Visual Orchestration: Forget sifting through lines of code to understand complex logic. Workflows allow you to visually represent conditional branches, loops, circuit breaker patterns, and retry mechanisms. This visual approach means you configure, rather than code, error handling, making issues incredibly easy to inspect.

Ben, reflecting on past advice, now suggests a powerful mental shift: first consider why you wouldn’t use a workflow, rather than always opting for them. He argues they’re a natural fit for microservices responding to events.

II. The Double-Edged Sword: Challenges & Tradeoffs ⚔️

While workflows offer immense power, building modern systems isn’t without its hurdles. The speakers didn’t shy away from the inherent challenges:

  • Idempotency at Scale: Crucial for reliability, especially in sensitive areas like payments, idempotency is tough. It’s often overlooked in small-scale testing, only to become a nightmare with millions of transactions.
  • Accidental Monoliths: A workflow can, ironically, become a monolith itself. As you orchestrate more tasks within a single workflow, it grows, potentially losing the benefits of modularity.
  • Microservice Boundaries: How big should a microservice be? This remains a common difficulty, with teams often creating services that are either too small or too large.
  • Event Design Dilemma: Event-driven architectures are great for decoupling, but what kind of events?
    • “Thin” events (minimal data) require lookup calls.
    • “Fat” events (all necessary data) can lead to monolith-like data flows.
    • The optimal approach usually lies somewhere in between.
  • Cognitive Load: Ultimately, every design choice boils down to managing the cognitive load on development teams. Complex systems, whether monoliths or poorly designed microservices, hinder onboarding and make future changes a painful ordeal.

III. Your Toolkit for the Cloud Frontier 🛠️

So, what tools are developers leveraging to tackle these challenges? The speakers shared a wealth of practical examples:

  • AWS Step Functions: A key AWS tool for building and orchestrating workflows, offering built-in observability.
  • Lambda Functions: Discrete code units, often orchestrated by workflows within microservices.
  • DynamoDB: Employed to track idempotency keys, ensuring unique transaction processing.
  • Temporal: Another example of a powerful workflow service, showcasing options beyond specific cloud providers.
  • Auth0: The speakers strongly advocate for using specialized services like Auth0 for authentication and authorization, rather than building these complex, security-critical systems in-house.
  • Serverless Frameworks: Tools like AWS SAM (Serverless Application Model) and the Serverless Framework assist in deploying serverless applications, though they can have a steep learning curve.
  • AWS CDK (Cloud Development Kit): A more developer-friendly approach, allowing infrastructure definition using familiar programming languages, which significantly reduces cognitive overhead.
  • GenAI: Demonstrated in a practical example to summarize video content and generate titles.
  • Stripe Apps and Stripe API: Showcase how extensibility allows third-party developers to build integrations and features directly within the Stripe dashboard, leveraging the powerful API without modifying the core product.

IV. The Power of Extensibility: Unlocking Unimagined Potential ✨

One of the most exciting segments highlighted the power of extensibility with an “extraordinary” Serverless Video project. The core application for live video streaming allowed external developers to extend its functionality by consuming events fired at key post-production milestones (e.g., “captions ready”).

The workflow was designed to wait for up to two minutes for plugins to return responses, which then informed subsequent steps. This plugin architecture, built with “tiny” code, enabled 16 different developers to create innovative features, such as using GenAI for video summarization and social sharing – features the core team had not even envisioned! This approach prioritized decoupling, ensuring the core application remained stable even if extensions failed.

V. Choosing Services & Building for Observability 🔭

Selecting third-party services is more than just checking an API. Developers must look beyond the API to understand:

  • Inherent Limitations: What the service cannot do.
  • Integration Capabilities: How it fits into your broader ecosystem.
  • Robust Authorization & Authentication Options: Paramount for security.
  • Seamless Integration: Ideally with existing cloud providers, without requiring additional layers like webhooks.

A critical segment addressed testing and observability in distributed systems, highlighting these as central problems when transitioning from monoliths. They advocate for a “test as you build” approach and leveraging “single pane of glass” dashboards that consolidate all events, API calls, and errors. While local testing remains a persistent challenge in serverless, building an observability framework from the outset is non-negotiable. Without it, you’ll face “log hell” and chaotic debugging across disparate services when long-tail issues emerge at scale.

AWS Step Functions provides built-in observability for workflows, offering visual state tracking. For cross-service tracing, AWS X-ray is an option, though its usability can be challenging, prompting a recommendation for specialized third-party services as applications grow.

VI. Microservices at Scale & the Cost Conundrum 💸

The universal application of microservices is being re-evaluated. The sheer decoupling and distribution of components make debugging incredibly difficult, leading to a loss of architectural coherence. This complexity, coupled with the explosion of data generated by modern applications, causes cloud costs to escalate enormously.

This led to a deep dive into cost optimization and critical trade-offs:

  • Build vs. Buy: Developers face a perpetual dilemma: build custom solutions (incurring significant developer hours, testing, and maintenance) or utilize off-the-shelf services (paying per use, risking vendor lock-in).
  • Startup Dilemma: Building for immediate scale can drain precious resources, yet failing to scale can lead to user churn. This “chicken and egg problem” often pushes startups towards serverless solutions, which offer rapid deployment but can entrench vendor dependence.
  • Mitigating Lock-in: The best strategy involves a multi-cloud approach, maintaining a presence with multiple providers to understand their terminology, build relationships, and enable potential shifts.

VII. The Cloud Provider Labyrinth & Software Philosophy 🤔

A significant challenge arises from the lack of commonality among major cloud providers. Despite tools like Terraform attempting abstraction, fundamental differences in terminology, rules, limits, and even basic service implementations (like queues) impose a substantial cognitive burden on development teams. This inconsistency, combined with a lack of opinionated guidance from cloud providers, leaves developers struggling to choose the “best of breed” solution. The speakers assert that outside of a single vendor, one gains the freedom to combine the best tools from various providers.

Reflecting on general software development philosophy, the discussion emphasized that “everything’s a trade-off.” There are no absolute right or wrong answers, only decisions that create future debt or solve immediate problems. They advocate for embracing experimentation and learning from mistakes, highlighting that the industry’s constant evolution—requiring relearning every “two or three years”—is precisely what keeps it fresh and interesting.

VIII. The Heart of Developer Advocacy & Your Path Forward 💖

Finally, the conversation shifted to the Developer Advocate role. It’s deemed one of the most challenging roles to hire for, demanding a unique blend of skills: strong technical proficiency, empathy for users, excellent communication (written, video, stage), independence, and a willingness to share opinions and even be “slightly wrong” to foster audience engagement. The speakers expressed their passion for the role, citing the satisfaction of problem-solving, connecting with people, and simplifying complex challenges.

For new developers, the most impactful advice is to share your learning. Documenting newly acquired knowledge, creating videos, and sharing code on GitHub not only reinforces understanding but also connects one with a community facing similar challenges. Equally important: don’t be afraid to experiment and get things wrong, as mistakes offer invaluable insights.


This conversation underscores a significant shift in software development over the past 25 years, moving from isolated systems to complex, distributed cloud environments. Network issues and out-of-sequence events are unavoidable. This evolution necessitates a mindset shift from building everything in-house to strategically leveraging specialized services and well-designed architectures to manage complexity and cognitive load. The future is distributed, and with the right approach, it’s incredibly exciting!

Appendix