Are you interested in having me at your company or conference, to present one of my existing talks, or host a session? I can also create a bespoke presentation, based on my existing content but aligned to the context and branding of your organization. I can do talks, interactive workshops, masterclasses or even sessions spanning multiple days. Get in touch, and we’ll discuss details and pricing: firstname.lastname@example.org or @michieltcs on twitter.
Here is a list of the talks that I am currently presenting.
Learning in production ( or why the Apollo 11 landing nearly failed)
Tests, monitoring, these help us assert the known knowns of our systems. But what about the known unknowns? Or, especially in complex distributed systems, the unknown unknowns? What can we learn from the space program? What can we learn from the Apollo 11 landing? How can we prepare for the unknown and build our adaptive capacity?
Attendees will learn about the challenges of dealing with complex distributed systems. The main thread of the story is: we should prepare the human element for the things that matter. We can’t test everything, we can’t prepare for everything, but we can learn to be prepared to deal with anything. Ideas such as adaptive capacity, operability, chaos engineering and incident response will be discussed.
Build breakers, not gatekeepers!
Traditional software development occurs in phases, where QA, security and other roles act as gatekeepers to production. This leads to silos, delays and doesn’t scale.
So, instead of waiting for a human to decide what is and isn’t valid, learn how to use automation to continuously enforce standards in your software. Let’s turn gatekeepers into build breakers!
Attendees will learn to apply build breakers (automated quality gates in pipelines) that help to enforce code style, quality, tests, security, performance and other standards in their software.
Real-world Continuous Delivery: Learn, Adapt, Improve
This talk tells the story of a recent real life project I did together with 4 development teams. Learn how we adopted the textbook practices, patterns and principles of Continuous Delivery and applied them to an existing monolithic application. I’ll discuss what worked well & what didn’t, and how we dealt with the messy reality of failing pipelines, flaky tests and brittle infrastructure. Find out how we transitioned from mostly manual, bi-weekly, error-prone releases to 30 automated deployments per day, while significantly reducing overhead and increasing quality.
Database schema migrations with zero downtime
Does your application or service use a database? When that application changes because of new business requirements, you may need to make changes to the database schema. These database migrations could lead to downtime and can be an obstacle to implementing continuous delivery/deployment.
How can we deal with database migrations when we don’t want our end-users to experience downtime, and want to keep releasing?
In this talk we’ll discuss non-destructive changes, rollbacks, large data sets, useful tools and a few strategies to migrate our data safely, with minimum disruption to production.
Dealing with change in event sourced applications
In software development, change is pretty much the only constant factor. In fact, embracing change is one of the twelve principles behind the Agile Manifesto. As time passes, our understanding of the domain we are working in evolves. We develop based on new requirements, (better) insights, opportunities, changes in the market or legislation, or other factors.
These inputs eventually all lead to modifications to our application, which can be very challenging to implement if the application uses event sourcing. Indeed, when applied very strictly, event sourcing can be quite resistant to change. And unfortunately, there’s not a lot of literature on this subject (yet).
In this talk, we’ll explore how to deal with important questions such as projection updates, event updates and versioning, and existing privacy legislation (such as the GDPR).
Effective leadership for modern software organizations
Modern software development places a lot of emphasis on the autonomy, self-organization and responsibility of teams. A common misconception is that there is little or no role for leaders of such teams.
On the contrary! In this rapidly changing world, where competition is fierce and the pressure to deliver is high, effective leaders create environments that allow teams to thrive. They enable, coach and inspire.
But what makes a leader an effective leader? Attend this talk to learn more about various leadership theories, how they can be applied in practice, and my thoughts on leadership based on experience as a tech lead and scrum master and from military service.
Forget me, please? Event sourcing and the GDPR.
In May 2018, a new piece of EU legislation called the General Data Protection Regulation (GDPR) will come into effect. The GDPR attempts to regulate data protection for individuals within the EU and has very interesting and specific implications for applications that use event sourcing.
In that context, the most interesting and challenging part of the regulation is without a doubt Article 17, the ‘right to erasure’: the right for individuals to request that their data be removed from the databases of a company.
In this talk, I’ll discuss my thoughts on the GDPR and give a few helpful pointers and tips!
Workshop and session topics
Beyond the talks above, here are some of the topics that I can help you with.
Introduction to Continuous Delivery / Deployment
Continuous Integration, Continuous Delivery, Continuous Deployment. Three very important cornerstones of modern software development and vital to be able to deliver software fast. In this session I’ll show how to build an effective deployment pipeline and the implications and requirements when automatically deploying every single commit to production.
Breaking down the monolith: legacy applications and the Strangler Pattern
It’s a situation many of us are familiar with: a large, legacy, monolithic application that generates income, but suffers from limited or no tests, a slow & manual release process and a team that has low confidence.
Using examples and lessons learned from a real-world case, I’ll show how to apply the Strangler Pattern on that legacy monolith, break it down into manageable services, and get things moving again. We’ll also take a look at testing strategies and various best practices.
Workshop Test Driven Development (TDD)
Tests enable change. Through code kata’s (such as Mars Rover, or Game Of Life) we’ll discover the “Red-Green-Refactor” loop, the FIRST principles, mocking, pair programming and all the other things required to write good (unit) tests.
Workshop Behavior Driven Development (BDD)
Building the thing right is very important, but building the right thing is even more so. BDD enables a team to write automated tests that capture the intent behind functionality and verify that same functionality. In this session we’ll discuss Ubiquitous Language, specification by example, scenarios and how to implement scenarios as automated tests.
Introduction to Docker & Kubernetes
Containerization is easily one of the most interesting and fundamental technologies in recent years. Packaging and deploying applications as software containers enables rapid change, immutable infrastructure and systems. Orchestration tools such as Kubernetes can automatically manage, schedule and scale your containers. In this session I’ll discuss development and testing using containers, the practical implications of a containerized setup and the basics of how to employ Kubernetes.
Introduction to DevOps
As Werner Vogels, CTO of Amazon, says: “you build it, you run it.”. The shift towards the DevOps mentality / mindset is one of the most important and profound changes in our industry. Just writing code as part of a project is no longer sufficient. In this session I’ll discuss responsibility, ownership, breaking down walls, “code as craft” and the various challenges posed to the modern developer.
Introduction to Microservices
“Microservices are an approach to distributed systems that promote the use of finely grained services with their own lifecycles, which collaborate together.” – Sam Newman
In this session I’ll discuss the how & the why (or why not) behind microservices. How to manage complexity, testing and scalability, and how to enable robust services by introducing chaos engineering and anti-fragile thinking.
Introduction to modern infrastructure essentials
In this session we’ll take a look at virtualization, containers, infrastructure as code, immutable infrastructure, (auto-)scaling, cloud services and clustering.
Monitoring, logging, measuring & dashboarding
Every team needs to know the state of their application in production and be able to quickly detect and fix any issues, before the customer encounters them. This session discusses available open source tools (such as the Elastic stack, Prometheus, Nagios, Dashing, Grafana and others) and their implementation to build a complete and powerful monitoring system.