• Home
  • Workshops
  • Services
  • Contact
Mont-Cenis-Straße 399, Herne 44627, Germany
+49 (0) 221 9865099 0
hello@devninjas.io

Workshops

  • Docker Fundamentals
  • Kubernetes Introduction
  • CKAD Exam Prep
  • CKA Exam Prep
  • All Workshops

Services

  • Shogun · Platform Consulting
  • Mamori · Managed Retainer
  • Kensho · Platform Audit

Company

  • Contact
  • Sitemap
2026 • Coded with by DevNinjas
  • Imprint
  • Privacy
  • GTC

Introduction to Rust

After four days you will write memory-safe Rust code and understand why Rust powers ripgrep, parts of the Linux kernel, and Cloudflare Workers. From ownership and borrowing through concurrency with threads and Tokio to your own CLI tool and web server: all hands-on in your own cloud environment.

Share via email
  • Workshop levelNo prior knowledge needed
  • Satisfied participants2340+
  • Days4
  • LanguageGerman & English
  • Workshop codeDW29

Workshop Details

What makes this workshop stand out

🎯

What you will learn and take away

After four days of Rust training you will independently write memory-safe, concurrent code. Here is what you take away:

  • Understand and apply ownership and borrowing: you read compiler errors, resolve lifetime issues, and work confidently with references, smart pointers, and the borrow checker
  • Build CLI tools and web servers: with clap and Axum you create production-grade applications that run as a single binary without a runtime
  • Write concurrent code: from threads and channels to async/await with Tokio, you apply Rust's "fearless concurrency" in practice

All exercises run in the DevNinjas Dojo, your own cloud environment. No local setup, no hassle. You take working code home.

Want to continue? Our Docker Workshop shows you how to package and deploy Rust binaries in containers.

💼

Why the investment pays off

Memory safety vulnerabilities cost companies millions: Microsoft and the Chromium project each report that around 70% of their security vulnerabilities are memory-related. Safe Rust largely rules out this class of bugs, mostly at compile time. This Rust training brings your team up to speed:

  • Prevent vulnerabilities at the source: Rust's ownership model prevents use-after-free and data races at compile time; array accesses are additionally bounds-checked at runtime (protecting against buffer overflows)
  • Performance without compromise: Rust binaries run as fast as C/C++, need no runtime, and start in milliseconds
  • Future-proof technology: the Linux kernel, Android, AWS, and Cloudflare rely on Rust for safety-critical components

Small groups of maximum 8 participants so we can address questions from your project context.

📋

Prerequisites

Required:

  • Programming experience in another language (Python, Java, JavaScript, C#, C++, Go, or similar)
  • Comfortable using a text editor or IDE
  • Basic command-line knowledge

Not required:

  • Rust experience (built from scratch)
  • C/C++ knowledge or systems programming background
  • Linux knowledge (the cloud environment runs in the browser)

Workshop Agenda

Your Agenda at a Glance

Hands-on and structured. Every participant works in their own cloud environment. The agenda shows you what to expect each day.

Day 1: Understand Rust, set up the toolchain, and write first programs

5 topics
09:00–10:00💬 Introduction Round

Rust was publicly announced by Mozilla in 2010 with a clear goal: memory safety without a garbage collector. Today, Rust powers parts of Firefox, the Linux kernel, Cloudflare Workers, and tools like ripgrep. In this block you will explore what problems Rust solves that C and C++ leave open, and why companies like Microsoft, Google, and Amazon use Rust in safety-critical systems. You will understand the three design principles (safety, speed, concurrency) and assess when Rust is the right choice.

You set up your Rust workspace in the DevNinjas Dojo and get familiar with the toolchain: rustup for version management, cargo as the build system and package manager, rustc as the compiler. With cargo new you create your first project, build it with cargo build, and run it with cargo run. By the end of this block you know the project structure (Cargo.toml, src/main.rs) and have set up clippy and rustfmt as quality tools.

rustRust
12:00–13:00🥪 Lunch Break

Rust is statically typed but supports type inference, so you do not need to annotate every type explicitly. You work with primitive types (i32, f64, bool, char), tuples, and arrays. Special focus goes to Rust's distinction between let (immutable) and let mut (mutable): immutability by default is a deliberate design decision. For control flow (if, loop, while, for), you will see that if is an expression and can return values directly.

Functions in Rust have explicit return types and return the last expression without return. You write functions with various parameters, use closures as anonymous functions, and organize code into modules with mod. Rust controls visibility through pub: private by default. Then you learn the difference between binary crates and library crates and pull in your first external dependency via Cargo.toml and crates.io.

Why does Rust have two string types? String and &str regularly confuse newcomers. In this block you clarify the difference between owned and borrowed data using strings, preparing you for the ownership concept on day 2. Then you work with Vec as a dynamic array and HashMap<K, V> for key-value pairs. Slices (&[T]) show you how Rust efficiently references parts of data structures without copying them.

16:00–16:30💭 Questions & Answers

Day 2: Master ownership, handle errors, and build custom types

5 topics
09:00–10:00💭 Questions & Answers

Ownership is the concept that sets Rust apart from every other language. Every value in Rust has exactly one owner, and when that owner leaves scope, the memory is automatically freed. You work through the three ownership rules, observe move semantics in action, and understand why let b = a on a String invalidates access to a. With Copy and Clone you consciously control when values are copied or moved.

Not every function call should take ownership. With references (&T and &mut T) you borrow values without moving them. The borrow checker ensures at compile time that no data races occur: either any number of readers or exactly one writer. Using concrete examples, you provoke typical compiler errors, learn to read the error messages, and fix the issues systematically. This debugging pattern will accompany you through the rest of the workshop.

12:00–13:00🥪 Lunch Break

You define custom data types with structs (named fields, tuple structs, unit structs) and enrich them with methods via impl blocks. Then come enums: unlike Java or C#, Rust enums can carry data. Option and Result<T, E> are the most important standard library enums and replace null pointers and exceptions. With match and if let you destructure enums in a type-safe way and handle every case explicitly.

Rust has no exceptions. Instead, Result<T, E> and the ? operator enforce explicit error handling at every call site. You implement custom error types with the Error trait, use ? for elegant error propagation, and see how the thiserror crate reduces boilerplate. You also learn the difference between unwrap() (quick but unsafe) and expect() (better for debugging) and why panic! is only meant for unrecoverable errors.

Traits are Rust's answer to interfaces and type classes. You implement Display, Debug, and From for your own types and write your first custom traits. With generics you define functions and structs that work across different types: fn largest<T: PartialOrd>(list: &[T]) -> &T instead of separate functions per type. Trait bounds give the compiler the necessary guarantees, and you see why generic code in Rust is monomorphized at compile time (zero runtime overhead).

16:00–16:30💭 Questions & Answers

Day 3: Deepen memory management, write concurrent code, and test

5 topics
09:00–10:00💭 Questions & Answers

Lifetimes describe how long a reference remains valid. Most of the time the compiler infers them automatically (lifetime elision), but in certain cases you must annotate them explicitly: fn longest<'a>(x: &'a str, y: &'a str) -> &'a str. Using practical examples you work with lifetime annotations in functions and structs, understand the elision rules, and resolve typical lifetime errors. This block builds directly on the ownership and borrowing knowledge from day 2.

Not all data lives on the stack. With Box you allocate values on the heap, which is necessary for recursive data structures and large objects. Rc (reference counting) enables multiple owners within the same thread, Arc (atomic reference counting) does the same across threads. You implement a simple tree structure with Box and Rc and see how RefCell enables interior mutability when the borrow checker is too strict at compile time.

12:00–13:00🥪 Lunch Break

Rust's "fearless concurrency" is not marketing: the compiler prevents data races at compile time. You start threads with std::thread::spawn, communicate via mpsc channels (multiple producer, single consumer), and protect shared data with Mutex and Arc. Using a concrete example you parallelize a computation and compare sequential versus parallel runtime. Send and Sync as marker traits explain why some types are thread-safe and others are not.

Threads work well for CPU-bound work, but for I/O-intensive applications (web servers, API clients) async is more efficient. You write your first async fn, use .await, and understand why Rust needs an external runtime like Tokio (unlike Go with its built-in runtime). With Tokio you start asynchronous tasks, work with tokio::select!, and see how async interacts with ownership. This block prepares you for day 4 (Axum web server).

Rust ships with a built-in test framework: #[test] functions, assert!, assert_eq!, and assert_ne!. You write unit tests directly alongside production code (in the same module), create integration tests in the tests/ directory, and measure code coverage with cargo tarpaulin. Doc comments (///) become HTML documentation and can include executable code examples that cargo test verifies automatically. No dead code examples in the docs.

16:00–16:30💭 Questions & Answers

Day 4: Build practical projects and assess Rust in the ecosystem

5 topics
09:00–10:00💭 Questions & Answers

Many well-known developer tools are written in Rust: ripgrep, fd, bat, delta, eza. You build your own command-line tool with the clap crate, the standard for argument parsing in Rust. Using derive macros you define subcommands and flags declaratively, validate inputs, and auto-generate help text. The result: a compiled binary you can run on any system without a runtime.

rustRust

Axum is the web framework from the Tokio ecosystem and has established itself as the modern standard for Rust web servers. You define routes with the Router, write handler functions, and use extractors for path parameters, query strings, and JSON bodies. By the end of this block your own REST-capable server with multiple endpoints is running in the Dojo.

12:00–13:00🥪 Lunch Break

Serde is Rust's serialization framework and one of the most downloaded crates on crates.io. With #[derive(Serialize, Deserialize)] you make your structs JSON-capable and integrate serde_json for processing. You extend your Axum server with JSON endpoints and see how the type system catches invalid data at deserialization time. Then you evaluate new crates: how do you read documentation on docs.rs? How do you assess quality and maintenance status?

Closures and iterators are the backbone of idiomatic Rust code. You work with .map(), .filter(), .collect(), and .fold() and see how the compiler optimizes iterator chains into efficient machine code (zero-cost abstractions). The three closure traits (Fn, FnMut, FnOnce) determine how closures capture values from their environment, tying directly back to the ownership model. After this block you replace manual loops with expressive iterator pipelines.

To wrap up, you assess where Rust stands today and which directions are worth pursuing. From WebAssembly for browser performance to embedded Rust on microcontrollers to contributing to the Linux kernel (in the mainline kernel since Linux 6.1, an official part of kernel development since late 2025): you get a roadmap with concrete resources. For the cloud context, we show how Rust binaries are packaged into Docker containers and deployed on Kubernetes, and how this connects to our container workshops.

16:00–16:30💭 Questions & Answers

Our Benefits

All from one hand!

With our high-quality trainings and workshops, you can bring yourself and your team up to date. All this with many benefits that you get from us.

👨‍💻High Practical Content
70% hands-on, 30% theory. You work continuously with real scenarios and take working code home with you. No PowerPoint battles, but directly applicable knowledge for your projects.
☁️Cloud Learning Environment
DevNinjas Dojo: Your own Kubernetes clusters and VMs for each participant in the browser. No installation, works despite VPN/proxy/firewalls. You work with dedicated resources, not in shared environments.
🥷Experienced Trainers
Full-time DevOps engineers and consultants from DevNinjas lead the workshops. Not external trainers, but specialized employees actively working on client projects and sharing real-world experience.
👥Small Groups
Maximum 8 participants per workshop. Everyone gets individual support from the trainer. Your specific questions and use cases get answered, not passed over in anonymous crowds.
🏗️Real-World Scenarios
No toy examples or hello-world demos. You work with production-grade setups: multi-container applications, CI/CD pipelines, monitoring stacks. Directly transferable to your production environments.
🎓Certification
You receive an official certificate of attendance as PDF and a verified LinkedIn badge. Document your professional development for your employer, HR, and recruiters professionally.

Testimonials

How participants experience our trainings

4.9/ 5

1047+ participant reviews · unfiltered

across all DevNinjas trainings

Trainer
5.0
Content
4.8
Hands-on
4.8

DevNinjas overall: over 1,384 participants · 207 companies · 241 workshops

Including BMW, Bundeswehr, Deutsche Bahn and many more.

"My colleagues specifically looked for a sysadmin course for Docker with another provider and had an instructor who only set up an IDE for them and then only worked on a task sheet with development tasks. I had a course with lots of background information, an instructor who had a really extensive knowledge of the whole subject matter beyond the slides, and I feel optimally informed."

Default avatar picture of DevNinjas
Johannes Bernstein
@TRIMET Gelsenkirchen SE

"The advanced Kubernetes workshop at DevNinjas really helped me grow professionally. The content was practical and excellently prepared, so even complex topics like RBAC, network policies and Ingress were conveyed in an understandable and directly applicable way. The deep expertise of the trainer was especially impressive and noticeable in every session. I can recommend this workshop to anyone who wants to use Kubernetes in production!"

Default avatar picture of DevNinjas
Marius Büttner
@Siemens AG

"From my perspective, the workshop had the right speed and an appropriate level of challenge. The subject matter was explained clearly by the instructor and practically consolidated with well-distributed exercises. Adjusting the workshop focus to the participants wishes was not a problem. Valuable practical experiences were shared, and even more specific questions were gladly answered. The instructor's professional expertise and extensive practical experience on the subject gave this workshop a special quality."

Default avatar picture of DevNinjas
S. Kaiser
@forcont business technology GmbH

"The seminar gave a very good overview of Docker administration, with a look at Kubernetes and how this knowledge simplifies everyday work. Many small, easy-to-follow examples with hands-on exercises and a focus on best practice consolidated what we learned. The instructor had an answer to every question, and for very specific questions he came back with a fitting example. The alternation between introductions and exercises was very well organised."

Default avatar picture of DevNinjas
Sebastian A.
@DMI GmbH & Co. KG

"The workshop was very informative and I could immediately spot the mistakes I had made in past Docker projects. Before, I lacked the theory and the fundamentals, so I had only been acting on best practice. Now I can write stable Dockerfiles and Docker Compose setups and secure them properly. A very good workshop that was also a lot of fun!"

Default avatar picture of DevNinjas
Timon Strangfeld

"In the workshop the most important Docker and Kubernetes topics were put together, prepared and explained superbly. The exercises fit precisely and were very well chosen in terms of difficulty. I am very satisfied with how much I learned in the five days and feel well prepared for upcoming tasks at work. Sure, you can teach yourself a lot on your own with AI tools, but without the workshop I would not have gained this overview or worked through so many exercises independently."

Default avatar picture of DevNinjas
Christine L.

"Nico is a very friendly and technically skilled instructor. He answered all questions well. You quickly notice that he combines academic expertise with many years of professional practice."

Default avatar picture of DevNinjas
Philipp van Wickevoort Crommelin
@parcIT GmbH

"The workshop gave me a very good insight into Kubernetes and made working with containers much clearer. Nico delivered the content in a practical and well-structured way, so I could quickly find my way around. The hands-on exercises in particular helped me apply what I learned directly. For anyone looking for a solid introduction to Kubernetes, this workshop is definitely recommended."

Default avatar picture of DevNinjas
Daniel Hagen
@DKB Service GmbH

"I really enjoyed the Docker & Kubernetes workshop at DevNinjas. Nico explained the complex topics around containers and orchestration in a very understandable and practical way. The mix of theory and hands-on exercises was perfect for being able to apply everything directly. I was able to take a lot away for my everyday work and now feel significantly more confident working with Docker and Kubernetes."

Default avatar picture of DevNinjas
Dominik Kneissl
@Siemens Healthineers

"The Docker workshop at DevNinjas was an all-round success. The content was clearly structured and practically delivered, including meaningful hands-on exercises. I took away a lot and feel significantly more confident working with Docker. Even more complex topics like multi-stage builds and networking were explained in an understandable way. A clear recommendation for anyone who really wants to understand Docker!"

Default avatar picture of DevNinjas
Daniel Müller
@Siemens Healthineers

"I really enjoyed the Docker workshop at DevNinjas! The content was well structured and clearly explained, even for beginners like me. The mix of theory and hands-on exercises was especially helpful for trying Docker directly. By the end, I was able to build my own images, configure containers and set up networks. Absolutely recommended for anyone who wants to learn Docker!"

Default avatar picture of DevNinjas
Pascal Schunk
@OEDIV

"The "Docker & Kubernetes Bundle" training provided me with solid, practical knowledge for everyday work and enabled me to handle Docker and Kubernetes professionally. The excellently structured material offers real added value, even beyond the workshop. The combination of technical depth and interactive delivery by the trainer rounded off the whole experience. An experience that continues to help me even after the training."

Default avatar picture of DevNinjas
Swen Strangfeld
@Bundesdruckerei GmbH

"It was fun and I learned a lot that I can actually apply directly in my company. The trainer's approach was very hands-on, and he repeatedly brought in real-world examples."

Default avatar picture of DevNinjas
Felix R.
@Dirk Rossmann GmbH

"I can recommend the Docker workshop at DevNinjas without reservation! The training was excellently structured: theory and practice complemented each other perfectly. The trainer always answered questions competently and clearly, making even more complex topics easily accessible. I was especially impressed by the professionally designed workshop materials, which are very useful as a reference even after the course. Overall, a thoroughly successful learning experience!"

Default avatar picture of DevNinjas
Lukas Graf
@Bundeswehr

"The seminar was superbly prepared, the group pleasantly small and the materials first-class. An excellent instructor who knows the subject inside out, takes time for the participants and answers questions in detail. The learning material alternated in a balanced way between theory and hands-on exercises that were timed excellently."

Default avatar picture of DevNinjas
Kevin H.
@Oest Holding GmbH

"Competent instructor. Individual approach to problems and topics. Interesting structure. Highly recommended to get an in-depth insight into the Docker world. The workshop was definitely worth it. Thanks!"

Default avatar picture of DevNinjas
H. Hillebrand
@PFSt NRW

Continue Learning

Related Workshops for You

Alternative
Introduction to Golang Workshop
Beginner

Introduction to Golang

After three days you will write safe, concurrent Go code and understand why Go powers Docker, Kubernetes, and Terraform. From language fundamentals through goroutines and channels to your own HTTP server and CLI tool: all hands-on in your own cloud environment.
3 Days€1,665.00
Tooling
Introduction to Docker Workshop
Beginner

Introduction to Docker

Learn to use Docker confidently in two days. From the container CLI through Dockerfiles and multi-stage builds to Docker Compose. You work hands-on in a dedicated cloud environment, live online in groups of up to 8 participants.
2 Days€1,110.00
Next Step
Introduction to Kubernetes Workshop
Beginner

Introduction to Kubernetes

Learn to use Kubernetes confidently in three days. From Pods and Deployments to Storage and deployment strategies. You work hands-on in your own cloud environment with kubectl, K9s, and Helm.
3 Days€1,665.00
Vincent Sturm - DevNinjas

Your Contact

Vincent Sturm

Key Account Manager

Looking for the right Kubernetes or DevOps training for your team? Vincent personally advises you on open workshops, certification prep and customized in-house training. He can also connect you with our consulting services. Get in touch with him directly.

vincent@devninjas.io
+49 221 9865099-4
WhatsApp Chat

Frequently asked questions

Yes, experience in at least one programming language (Python, Java, JavaScript, C#, C++, Go, or similar) is required. You should know what variables, functions, loops, and conditionals are. Rust experience is not required: we start from scratch and build everything step by step. C or C++ experience is helpful but also not needed.

Rust is considered a challenging entry point, mainly because of the ownership system and borrow checker, which no other mainstream language enforces as comprehensively. These concepts require a mindset shift, especially if you come from garbage-collected languages (Java, Python, Go).

Realistic assessment: The syntax feels familiar if you know C, C++, or Java. The ownership model takes one to two days of focused work before it feels natural. That is exactly what the workshop is for: in four days with an instructor and your own cloud environment, you learn the concepts faster than self-study because we analyze and resolve typical errors together.

Both languages compile to fast binaries but pursue different goals. Rust prioritizes memory safety and control, Go prioritizes simplicity and development speed.

Choose Rust when:

  • Systems programming is involved: operating systems, kernel modules, embedded systems, or drivers
  • Memory safety without a garbage collector is critical: the borrow checker prevents use-after-free and data races at compile time, and array accesses are bounds-checked at runtime
  • Maximum performance is required: Rust runs as fast as C, with no runtime and no GC pauses
  • You target WebAssembly: Rust is among the most widely used languages for Wasm modules
  • Zero-cost abstractions matter: generics and iterators compile down to highly optimized machine code

The trade-off is a steeper learning curve, especially around the ownership model. If you instead want to become productive quickly building cloud infrastructure and backend services, Go is often the more pragmatic choice. We offer both workshops: Introduction to Go (DW17) and this Rust workshop.

No, C++ knowledge is not required. Rust and C++ are both compiled systems languages, but Rust takes a fundamentally different path:

C++ offers maximum control but leaves memory management to the developer. Dangling pointers, buffer overflows, and use-after-free are common bugs that only surface at runtime.

Rust enforces correct memory management at compile time through the ownership system. When your code compiles, entire classes of bugs are ruled out. The borrow checker takes some getting used to at first, but after one to two days in the workshop you will work with it confidently.

Those coming from C++ will find much familiar (RAII, move semantics, zero-cost abstractions). Those coming from Python or Java learn a new mental model that improves code quality in any language.

After four days you will be able to:

  • Write, structure, and test Rust programs independently
  • Understand ownership and borrowing and resolve compiler errors systematically
  • Build concurrent applications with threads, channels, and async/await
  • Create CLI tools with clap and web servers with Axum as compiled binaries

Honest note: you will not be a Rust expert after four days, but you can start your own projects productively and use the borrow checker as an ally rather than an obstacle. Depth comes with practice.

Rust is used where memory safety and performance are both required:

  • Operating systems and kernels: Rust has been in the mainline Linux kernel since Linux 6.1 (2022) and an official part of kernel development since late 2025. Android uses Rust for safety-critical components
  • Infrastructure tools: Cloudflare, Dropbox, and Discord use Rust for high-performance backend services
  • Developer tools: ripgrep, fd, bat, delta, and Turbopack (Next.js) are written in Rust
  • WebAssembly: Rust is among the most widely used languages for Wasm modules in browsers and on servers
  • Embedded systems: Rust is increasingly replacing C in embedded systems and microcontrollers

Microsoft and the Chromium project each report that around 70% of their security vulnerabilities are memory-related. Safe Rust largely rules out this class of bugs.

All practical exercises take place in the DevNinjas Dojo, our browser-based cloud learning environment. Every participant receives dedicated resources: own Kubernetes clusters, VMs, containers (depending on the workshop topic). You work not in a shared environment, but have full control over your own infrastructure.

Benefits:

  • Your own clusters & servers: You get dedicated resources for your exercises
  • No software installation required: Everything runs in your browser
  • Works everywhere: Even in strict enterprise networks with VPN, proxy, and firewalls
  • Open protocols: SSH, HTTPS, standardized web terminals (no proprietary client)
  • Ready immediately: Login and start with the exercise right away

You only need a modern browser (Chrome, Firefox, Edge) and internet access. The Dojo is available to you throughout the entire workshop.

We recommend a maximum of 8 participants per training to ensure individual attention for each participant. For corporate trainings, arrangements for larger groups are possible.

Yes, upon completion you will receive an official certificate of attendance from DevNinjas as PDF. This confirms your successful participation and the topics covered. The certificate is perfect for conversations with your employer and your personnel file.

Additionally, you will receive a verified digital badge that you can directly embed in your LinkedIn profile (section "Licenses & Certifications"). The badge follows the Open Badges 2.0 standard and is verifiable via QR code at any time. This way you showcase your qualification and position yourself with recruiters.

Workshop Dates

Workshop dates

Choose a suitable date and book directly online. All dates are guaranteed to run.

Guaranteed to runFew spots left

17. – 20. August 2026

09:00 - 16:00 (CET/CEST, German time)

Online🇩🇪German

2.220,00 €

per person · plus 19% VAT

Guaranteed to runPopular date

07. – 10. September 2026

09:00 - 16:00 (CET/CEST, German time)

Online🇩🇪German

2.220,00 €

per person · plus 19% VAT

Guaranteed to run

07. – 10. September 2026

09:00 - 16:00 (CET/CEST, German time)

Online🇬🇧English

2.220,00 €

per person · plus 19% VAT

Guaranteed to run

21. – 24. September 2026

09:00 - 16:00 (CET/CEST, German time)

Online🇩🇪German

2.220,00 €

per person · plus 19% VAT

Your booking benefits

  • Guaranteed to run

    Every training date takes place: no cancellation due to low participant numbers.

  • Invoice after the workshop

    No prepayment: pay conveniently by invoice afterwards.

  • 3=2

    3-for-2 promotion*

    Register three participants, pay for two: the third seat is free.

  • Price per participant

    Transparent fixed price per participant, plus VAT.

No hidden costs

Cloud lab (DevNinjas Dojo) and all training materials are included in the price.

  • Certificate & Open Badge

    Certificate of attendance plus a digital Open Badge for your LinkedIn profile included.

  • * Cannot be combined with other discounts.

    Tailor a workshop for your team?

    Custom content, flexible dates, from 1 participant.

    Request
    Book date
    Book date
    Book date
    Book date