Skip to main content

Learn building Extremely Scalable & Resilient Go backend

Level up your Go skills and join the most popular Event-Driven training in Go.

  • 📚 Go from theory to practice by creating a real-life project
  • 💻 Code in your IDE with examples cloned by our CLI
  • 🕝 Work at your own pace and finish the training at any time
  • 🌟 Stand out from other candidates with in-demand skills
  • 🔗 Discuss your solutions with training attendees and mentors
Avatar 0Avatar 1Avatar 2Avatar 3Avatar 4Avatar 5Avatar 6Avatar 7Avatar 8Avatar 9
🔥 XXX developers are already on board

NOTE: The next sale of Go Event-Driven will run Spring 2025.
Join the wait list to get notified when it's available.

Let's talk business

It’s a funny job market now: developers complain they can’t find jobs, and companies still struggle to hire. Many will look to hire people who can design a system to handle the worst production outages and extreme traffic spikes without keeping anybody up in the middle of the night.

While leading multiple teams, we noticed many developers don’t know how to implement Event-Driven architecture. Even fewer know how to do it properly. That's too bad because it’s impossible to implement some scenarios in a traditional, synchronous way.

The good news is we've been there, and you don't need to reinvent the wheel.

Stay with us if you want to learn how to build systems that:

  • ✅️ Scale well — The asynchronous approach ensures all requests are processed during traffic surges.
  • ✅️ Handle traffic spikes — Event-Driven Architecture (EDA) improves handling requests during intense traffic spikes. No need for expensive autoscaling.
  • ✅️ Don't wake you up — With EDA, outages won't interrupt your sleep. With events in place, issues can be resolved later or even auto-heal.
  • ✅️ Simplify complex parts — EDA breaks down complex problems into manageable chunks, which makes them simpler to build and maintain.
  • ✅️ Help advance your career — EDA is a skill in demand. Stand out from the crowd and enjoy new job opportunities.

We designed an online training in which you can learn this rare knowledge by building real-world projects. There are no boring videos to watch.

Gopher of time

You can't buy time

It's rare to find high-quality learning materials. They're often inconsistent, outdated, or incomplete. (We've been there.)

Go Event-Driven distills practical knowledge and years of experience. We focus on essential topics and filter out the noise to ensure you're productive right away.

Practical Gopher

Hands-On

You can't learn to drive a car from a book or a video, and writing software is the same.

This training is all about practice. To grasp the topics, you'll get your hands dirty with coding. If you prefer passively watching videos, you're on the wrong website.

Practical Gopher
Gopher of success

Real-world examples

Have you ever wondered why many tutorials use a coffee machine analogy? Proper examples require work.

Abstract or too simple examples leave you unprepared for real-world challenges. In Go Event-Driven, you apply what you learn to a real-world project.

Stay in your environment. Use your favorite tools.

We created a custom platform that guides you through the training. It's a unique experience that helps you learn the fastest way possible. You won't find such a learning platform anywhere else.

Work on real-life projects doesn't happen in the browser. We let you stay with your favorite tools. VS Code, GoLand, Vim, Emacs? It's up to you.

You can solve the exercises at any time that suits you best. You can start the training now, in a week, or a year.

How our trainings look like?


What graduates like about our platform?


avatar

This "Event-Driven Go" course was honestly super useful. The CLI tool they've got for hands-on exercises is a game-changer. The CLI tool functions like an interactive debugger, giving immediate feedback and validation as you work through coding exercises. I'm looking forward to using what I learned directly in my job.

The Discord community is also a big win. It's not every day you get to chat directly with the people who made the course. They're super helpful and quick to answer any questions. Also, they continuously take feedback and improve the course.

So, would I recommend it? Absolutely, especially if you're into Go or want to get the hang of event-driven architecture. It's well worth the time and money.

Damian Trzepała, Software Development Engineer
title

What's inside?


20+
CODING HOURS*
20
MODULES
94
EXERCISES
* Based on average time spent by our trainees

What will you learn?


We carefully selected only the essential topics.

You will practice each agenda item with smaller exercises, and then apply them to a complete application.

See the full list of modules below.

What you will learn
  • ✅️ Learn about synchronous and asynchronous communication patterns to build scalable and resilient systems
  • ✅️ Understand the benefits and challenges of asynchronous processing to handle high loads and improve responsiveness
  • ✅️ Implement simple asynchronous processing using goroutines and retries to avoid blocking and handle temporary failures
You will implement
  • 🛠️️ Refactor synchronous API calls to asynchronous processing
  • 🛠️️ Handle temporary errors with retries in background workers
What you will learn
  • ✅️ Understand the role of message brokers in event-driven systems
  • ✅️ Learn how to publish and subscribe to messages using a message broker
  • ✅️ Handle errors and retries when processing messages to ensure reliable message delivery
  • ✅️ Use consumer groups for scalability and fault tolerance to process messages in parallel and handle failures
You will implement
  • 🛠️️ Replace in-memory message passing with a production-grade message broker
  • 🛠️️ Implement message publishing and subscribing using the message broker
  • 🛠️️ Refactor message handlers to use the message broker's features
What you will learn
  • ✅️ Understand the concept of events and how they differ from messages to build event-driven systems
  • ✅️ Learn how to design and structure events for maintainability and evolution
  • ✅️ Implement event marshalling and unmarshalling to serialize and deserialize events
  • ✅️ Use event headers for metadata to provide context and observability
You will implement
  • 🛠️️ Refactor the project to use events instead of plain messages
  • 🛠️️ Design and implement event payloads for different use cases
  • 🛠️️ Add event headers for metadata
What you will learn
  • ✅️ Learn how to use Watermill to simplify message routing and handling
  • ✅️ How to simplify message handler implementation and error handling to focus on business logic
  • ✅️ Implement graceful shutdown and health checks for the message router to ensure service reliability
You will implement
  • 🛠️️ Refactor the project to use Watermill
  • 🛠️️ Implement graceful shutdown for the message router
  • 🛠️️ Add health check endpoints for monitoring the service
What you will learn
  • ✅️ Learn how to use middleware functions to add cross-cutting concerns and reuse functionality
  • ✅️ Implement logging and correlation ID propagation using middleware to improve observability and traceability
  • ✅️ Understand how to handle dependencies and configuration in middleware to keep handlers focused on business logic
You will implement
  • 🛠️️ Add logging middleware to log incoming messages and errors
  • 🛠️️ Implement correlation ID middleware for request tracing
  • 🛠️️ Refactor middleware to handle dependencies and configuration
What you will learn
  • ✅️ Learn how to handle different types of errors in event-driven systems to ensure system resilience
  • ✅️ Implement error logging and monitoring using middleware to detect and diagnose issues
  • ✅️ Handle temporary errors, malformed messages, and code bugs to prevent system failures and data loss
You will implement
  • 🛠️️ Add error logging middleware to log errors and message details
  • 🛠️️ Implement retry middleware for handling temporary errors
  • 🛠️️ Handle malformed messages and code bugs gracefully
What you will learn
  • ✅️ Understand the importance of component testing in event-driven systems to ensure system reliability
  • ✅️ Learn how to write mocks for external dependencies to isolate components and improve testability
  • ✅️ Run the service in a test environment and verify its behavior to catch integration issues early
You will implement
  • 🛠️️ Refactor the project to allow running the service in a test environment
  • 🛠️️ Write mocks for external dependencies used in the project
  • 🛠️️ Implement component tests for different use cases
What you will learn
  • ✅️ Learn about the CQRS pattern and how it relates to event-driven systems to separate read and write concerns
  • ✅️ Understand how to use a high-level event bus from Watermill to simplify event publishing and handling
  • ✅️ Implement event handlers and processors using the CQRS component
You will implement
  • 🛠️️ Refactor the project to use the CQRS event bus from Watermill
  • 🛠️️ Implement event handlers and processors using the CQRS from Watermill
  • 🛠️️ Use consumer groups for scaling event processing
What you will learn
  • ✅️ Understand the concept of at-least-once delivery in event-driven systems to ensure message processing
  • ✅️ Learn how to handle message redelivery and idempotency to prevent duplicate processing
  • ✅️ Implement idempotent event handlers and repositories to ensure data consistency
You will implement
  • 🛠️️ Store event data in a database for querying and consistency
  • 🛠️️ Implement idempotent event handlers and repositories
  • 🛠️️ Handle message redelivery and ensure data consistency
What you will learn
  • ✅️ Learn about the outbox pattern for ensuring data consistency in distributed systems
  • ✅️ Understand how to publish events within database transactions to maintain data integrity
  • ✅️ Implement event forwarding from the outbox to the message broker to decouple services
You will implement
  • 🛠️️ Implement the outbox pattern for publishing events within transactions
  • 🛠️️ Forward events from the outbox to the message broker
  • 🛠️️ Refactor the project to use the outbox pattern for consistency
What you will learn
  • ✅️ Understand the difference between commands and events to model user intent and system state
  • ✅️ Learn how to use the CQRS command bus for asynchronous processing to improve system responsiveness
  • ✅️ Implement command handlers and processors
You will implement
  • 🛠️️ Refactor the project to use commands for asynchronous processing
  • 🛠️️ Implement command handlers and processors
  • 🛠️️ Use separate topics for commands and events
What you will learn
  • ✅️ Learn about read models and their role in event-driven systems to optimize data for querying
  • ✅️ Understand how to build and update read models from events to maintain data consistency
  • ✅️ Implement read models for different querying scenarios to improve system performance
You will implement
  • 🛠️️ Design and implement read models for various querying needs
  • 🛠️️ Update read models based on incoming events
  • 🛠️️ Expose read models through API endpoints
What you will learn
  • ✅️ Understand the challenges of message ordering in event-driven systems to ensure data consistency
  • ✅️ Learn different strategies for handling message ordering to prevent race conditions and conflicts
  • ✅️ Implement message ordering using partitioning and entity versioning to maintain data integrity
You will implement
  • 🛠️️ Refactor the project to handle message ordering using different strategies
  • 🛠️️ Implement message ordering using partitioning and entity versioning
  • 🛠️️ Ensure data consistency and correctness in the presence of out-of-order messages
What you will learn
  • ✅️ Learn about data lakes and their role in event-driven systems to store and analyze events
  • ✅️ Understand how to store events in a data lake for future processing and insights
  • ✅️ Implement event storage and retrieval from a data lake to enable data-driven decision making
You will implement
  • 🛠️️ Store all events in a central data lake for future processing
  • 🛠️️ Implement event forwarding from the message broker to the data lake
  • 🛠️️ Retrieve events from the data lake for building read models or analytics
What you will learn
  • ✅️ Understand the concept of internal and versioned events to manage event schema evolution
  • ✅️ Learn how to evolve events over time without breaking compatibility to support system evolution
  • ✅️ Implement event versioning and internal event handling to decouple services
You will implement
  • 🛠️️ Add versioning to events to allow for schema evolution
  • 🛠️️ Implement internal events for use within a single service or team
  • 🛠️️ Handle event versioning and compatibility in the project
What you will learn
  • ✅️ Learn how to migrate read models when event schemas change to maintain data consistency
  • ✅️ Understand the process of rebuilding read models from a data lake to recover from data loss or corruption
  • ✅️ Implement read model migration and rebuilding to ensure system resilience
You will implement
  • 🛠️️ Migrate read models when event schemas change
  • 🛠️️ Rebuild read models from events stored in the data lake
  • 🛠️️ Ensure data consistency and correctness during read model migration
What you will learn
  • ✅️ Understand the importance of observability in event-driven systems to ensure system health and performance
  • ✅️ Learn how to instrument the system with metrics and alerts to detect and diagnose issues
  • ✅️ Implement metrics and alerts for monitoring and troubleshooting to improve system reliability
You will implement
  • 🛠️️ Instrument the project with metrics for monitoring and troubleshooting
  • 🛠️️ Set up alerts for detecting and responding to issues
  • 🛠️️ Use metrics and alerts to ensure the system's health and performance
What you will learn
  • ✅️ Learn about distributed tracing and its role in event-driven systems to understand system behavior
  • ✅️ Understand how to instrument the system with tracing to identify performance bottlenecks and errors
  • ✅️ Implement tracing for end-to-end visibility and troubleshooting to improve system observability
You will implement
  • 🛠️️ Instrument the project with distributed tracing
  • 🛠️️ Propagate trace context across service boundaries
  • 🛠️️ Use tracing for end-to-end visibility and troubleshooting
What you will learn
  • ✅️ Understand the importance of fault tolerance in event-driven systems to ensure system availability
  • ✅️ Learn different strategies for handling failures and ensuring system resilience to prevent downtime
  • ✅️ Implement fault tolerance using retries, circuit breakers, and poison queues to handle errors gracefully
You will implement
  • 🛠️️ Implement retry mechanisms for handling transient failures
  • 🛠️️ Use circuit breakers to prevent cascading failures
  • 🛠️️ Set up a poison queue for handling and monitoring failed messages
What you will learn
  • ✅️ Learn about sagas and process managers for coordinating long-running processes to ensure data consistency
  • ✅️ Understand the differences between orchestration and choreography to choose the right approach
  • ✅️ Implement sagas and process managers for complex business workflows to handle distributed transactions
You will implement
  • 🛠️️ Design and implement sagas and process managers for complex workflows
  • 🛠️️ Handle compensating actions and rollbacks in case of failures
  • 🛠️️ Ensure data consistency and correctness across multiple services
avatar

Great hands-on course that immediately puts the theory into practical example.

Examples and tasks are extremely relevant for anyone trying to write event-driven application, all recognized as "yeah this is a problem we are solving/need to solve".

Small focused programming tasks and one longer bigger project that is built through the whole course is great for having isolated examples of the concepts and also their place in overall architecture which is often missing in courses/tutorials.

Definitely recommending this for all of our developers as the problems and solutions are daily struggle in any distributed system.

And as a bonus contains clever tool that allows you to work on the examples in any IDE you prefer AND does run robust tests that make sure the code works properly.

Petr Vitek, Developer
title

Created by

Robert Laszczak & Miłosz Smółka

Three Dots Labs logo Three Dots Labs founders

We are the authors of the Three Dots Labs blog, and our e‑book: Go With The Domain: Building Modern Business Software in Go. These are both some of the most popular resources about advanced programming patterns in Go.

We are also authors of the Watermill library, the most popular Go library for building event-driven and message-driven applications.

We worked in many fields, including infrastructure, complex and global financial domains, healthcare, and security. In the meantime, we've built a few startups and led multiple teams. It gave us a broad perspective on software development across different organizations.

We've been building projects together for over 15 years. In 2016, we fell in love with Go's simplicity and pragmatism. In our daily work, we help businesses win using Go software.

When we meet in our free time, we like to cook and eat some steaks and burgers.

Trusted by the Go community


300K+
blog visitors
unique per year
45K+
E-book downloads
15K+
Newsletter subscribers
12K+
GitHub stars
of our projects

We have been blogging, creating open-source projects, and writing an e-book for the past six years. This work helped us get the trust of the Go community.

The best proof was that we sold 323 copies of Go Event-Driven in pre-sale without even starting work on it. In other words, over 300 people trusted us enough to pay more than $54k total on the promise that we'll deliver something they'll love.

In total, XXX people have joined Go Event-Driven.

Real reviews of Go Event-Driven


See what professional developers say.

Review avatar

Tobias Andersson

Site Reliability Engineer

What is often missing when learning new things is interactivity along with easy explanations for complex technical terms.

This course has all the elements that made it an incredible course, it is interesting, challenging but above all incredibly educational.

Review avatar

JP Fontenele

Senior SWE
The hands on training is perfect for engagement and drilling down the concepts of event driven. I've done video trainings before, and don't get me wrong it's certainly possible to learn with them, but comparing to this approach is certainly a step up in the learning process.
Review avatar

Muhammad Ilham Hidayat

Software Engineer

Before I joined Go Event-Driven course from ThreeDotsLabs, I already used their watermill package for event driven applications.

By joining Go Event-Driven course, I realized that I only scratched the surface for watermill package and event driven applications in Go.

I enjoyed and learned a lot from this course.

Review avatar

Kacper Siuda

DevOps

The Golang Event-Driven training was a highly beneficial experience, especially due to its hands-on approach, which facilitated a deeper understanding and retention of core concepts. Applying the acquired knowledge has brought a new dimension of efficiency and scalability to my daily job tasks.

Review avatar

Viacheslav Ostrovskii

Software developer

That is a great idea to wrap up all infomation about event-driven systems in Go and put it in a traing with a convenient platform. I must admit quality of training parts, thare no boring videos just best practices, real-world examples and joy of coding.

The Three Dots Labs team created a great product to improve yourself in short period of time. Thanks a ton!

Review avatar

Bastiaan Breemer

Low code developer

Good training for understanding event driven design of applications, with the use off Watermill. It's great that you're able to do this training in your own coding environment, sometimes the error messages are a bit cryptic but for the most part it's easy to understand. From the way they first make you do an exercise and then implement that into a project makes you think about where it would fit inside a real implementation.

The training portal could use some more work to make it more user friendly to run on a single screen side by side but overall it's all good.

Review avatar

Cristo Sun

Senior developer

I really love this course! Unlike books or blogs, you can actually code step by step in this course, which gives you a much more solid understanding. Plus, event-driven programming is going to be the next big thing in the future as software becomes more complex. So, this course is totally worth it for you.

Review avatar

Thanh

Fullstack Developer

The training is so great to help me understand concepts of event-driven architect, and technic to apply its to my work. It's included the solutions for my problem when design system with serverless framework like nextjs, trpc. I find like this training so much. Thanks you for all awesome work!

Review avatar

Gyanendra Singh

Full stack Developer

Amazing, it’s just amazing, the course content is really good and the difficulty is just right, that don’t hold your hand through the training neither do they completely leave you, it’s in between and perfect combination of both the things.

Don't miss the next edition

We are planning next edition of Go Event-Driven Spring 2025. Usually it's available to buy for just two weeks period. Don't miss the next edition. Join the waiting list and be the first to know.