Marco Emrich
Consultant and software crafter at @codecentric
Consultant und Software Crafter bei @codecentric
Nürnberg, Germany
Actions
Marco is a Senior Consultant at codecentric. He is a passionate advocate of software craft and code quality. Marco lectures regularly at well-known conferences and is author of several programming books. When he is not organizing the Softwerkskammer Nuremberg (developer meetup), he is probably explaining to his son how to program robotic turtles.
Marco ist Architekt und Consultant bei codecentric und leidenschaftlicher Verfechter von Software Craft und Codequalität. Er hält regelmäßig Vorträge auf bekannten Konferenzen, ist Autor mehrerer Fachbücher und twittert als @marcoemrich. Wenn er mal nicht tief im Code vergraben ist, zocken ihn seine Kinder in analogen Brettspielen ab.
Links
Area of Expertise
Topics
Functional Programming and Domain Driven Design - a match in Heaven! en de
Many concepts that play a pivotal role in Domain-Driven Design (DDD) can be effortlessly and elegantly implemented with functional programming. These include:
Hexagonal Architecture
Describing Invariants
Stateless Services
In this captivating keynote, you will discover how the magic of functional programming is revolutionizing the world of Domain-Driven Design. Through impressive examples from functional languages like Haskell and classically used languages like TypeScript, we will show you how to seamlessly integrate these powerful concepts into your projects.
Experience how the integration into classical languages and architectures opens the door for you to apply these advanced techniques in practice, elevating your software development to an entirely new level. Get inspired and discover how functional programming and Domain-Driven Design together form an unbeatable combination – a true dream team for modern software development!
Refactoring Unit-Tests de
Auch wenn die aktuelle Test-Suite hervorragend dabei hilft, Probleme schnell zu finden, muss das nicht bedeuten, dass diese auch schnell behoben sind. Wie könnt ihr Tests schreiben, damit diese Fehler nicht nur reporten, sondern euch aktiv bei der Suche helfen? Umgekehrt kann die Wartung einer Test-Suite zur Zeitfalle werden. Wie bleibt die Test-Suite langfristig wartbar? Dieser Talk zeigt Lösungsansätze, die dabei helfen, die Qualität eurer Test-Suite auch nachträglich zu verbessern!
Test Commit Revert (TCR) Workshop: Learn TDD and Baby Steps en
**TDD** is notoriously difficult to learn. Especially the microcycle, also known as baby steps, can be really tricky. This is where **Test Commit Revert (TCR)** comes in - an exciting and somewhat controversial method to help you master these small steps. Originally developed by Oddmund Stromme in a workshop by TDD guru Kent Beck, TCR automatically reverts failed code. This forces you to work in a super structured and focused way.
Of course, TCR also has its pitfalls and is not always easy to use in practice. But don't worry, the community has been busy working on improvements and different workflows. There are now at least six different TCR workflows, each with its own advantages and disadvantages.
In this workshop, you can try out TCR for yourself and get to know the different workflows. The focus is on using TCR to understand and internalize the principles of TDD and the importance of small, incremental steps. So, grab your laptop and join us - it will be exciting and educational!
Workshop: Schulen der Test-getriebenen Entwicklung: Wieviel Vorab-Design braucht TDD? de
Eine umstrittene Frage im TDD-Umfeld, ist die Menge des Vorab-Designs. Die eine Seite bevorzugt schnelles Feedback und evolutionäres Design. Das ist "hirnloses Drauf-Los-Coden" schimpfen die Anderen. Diese bevorzugen wohlüberlegtes Vorabdesign. "Un-Agil, Wasserfall und Langsam und Waste" schimpfen die anderen.
Zwei TDD-Schulen oder Stile verkörpern diesen Kontrast, wie keine Anderen - die planungslastige lastige Hamburg School von Ralf Westphal auf das experimenierfreudige TDD as if you meant it von Keith Braithwaite auf der anderen Seite.
Natürlich gibt es wie immer Vor- und Nachteile. Wann macht welcher Stil mehr Sinn? Finde es selbst heraus in diesem Workshop!
Tidy First? - Mini-Refactorings for better Software Design en de
In his groundbreaking book "TidyFirst?", Kent Beck demonstrates that refactoring doesn't always have to be a daunting, time-consuming task. Even small, incremental "tidyings" can significantly speed up future feature development. This session will delve into the practical application of these "tidyings" (mini-refactorings) on existing legacy code, addressing key questions such as:
* Does tidying up code make economic sense?
* When is the optimal time to tidy up?
* How much cleanup is beneficial?
Workshop: MAD-TDD - there's a method to the madness en de
“Mob AI Driven Test Driven Development” - We won the buzzword bingo! What lies behind this illustrious term is a session in which we explore the interface between AI helpers (Github Copilot) and test-driven development (TDD) together (in mob programming).
What should we generate and what should we write ourselves? What does a good workflow look like? How do we ensure quality when code is generated?
We don't have definitive answers to all of these questions, but this session will give you the opportunity to find some of the answers yourself...
Workshop: Domain Modelling with TypeScript en de
Modern collaborative methods such as event storming bring experts and development teams together. "(Functional) Domain Modeling" goes one step further and enables collaborative work on code. In this workshop you can try it out "hands-on". Our PO explains the domain and we work out a common understanding in event-storming. Then we model the domain using the TypeScript type system. This enforces invariants already at compile time and experts can give feedback on the code directly. The goal of the workshop is not only to use the TypeScript type system for modeling, but also to practice communicating with POs, Requirement Engineers, customers and other subject matter experts!
Workshop: Domänenmodellierung mit TypeScript en de
Moderne kollaborative Methoden wie Event-Storming bringen Fachleute und Entwicklungsteams zusammen. Ihr habt das Event-Storming Ergebnis schon in der Tasche? Wie geht es weiter?
Eine Möglichkeit ist "(Functional) Domain Modelling". Es ermöglicht gemeinsame Arbeit direkt am Code. In diesem Workshop könnt Ihr es "hands-on" erproben. Unser PO bringt die Ergebnisse einer Event-Storming-Session mit. Auf dieser Basis modellieren wir die Domäne mithilfe des TypeScript-Typsystems. Das erzwingt Invarianten bereits zur Compilezeit und Fachleute können direkt Feedback zum Code geben. Ziel des Workshops ist es, nicht nur das TypeScript-Typsystem zur Modelling zu verwenden, sondern auch die Kommunikation mit POs, Requirement Engineers, Kunden oder anderen Fachexperten zu üben!
Workshop: Hexagonal Architecture for Web Frontends en de
For a long time the acronym WWW stood for Wild Wild West rather than World Wide Web. Architecture patterns and clear software design principles were often the exception rather than the rule. It was only with the last major framework wave of this decade and the triumphant advance of SPAs that a long overdue rethink began.
However, newer technologies do not automatically lead to a better architecture. It is still necessary to use architecture patterns consciously and purposefully. One of the best known patterns in Domain Driven Design is the "Hexagonal Architecture". You will learn:
* when it is worth using it,
* how the pattern distinguishes itself from others (e.g. onion architecture),
* and how to put it into practice.
We provide a prepared application with "holes" which the participants need to fill, while they implement new features based on business requirements.
Workshop: Sechseckige Webseiten? Hexagonale Frontend Architektur! en de
Gefühlt stand das Akronym WWW lange Zeit eher für Wild Wild West statt World Wide Web. Architekturmuster und klare Software-Design-Prinzipien waren oft eher die Ausnahme als die Regel. Erst mit der letzten großen Frameworkwelle dieses Jahrzehnts und dem Siegeszug von SPAs begann ein längst notwendiges Umdenken.
Neuere Technologien führen aber nicht automatisch zu einer besseren Architektur. Es gilt, nach wie vor, Architekturmuster bewusst und gezielt einzusetzen. Eines der bekanntesten Muster im Domain Driven Design ist die "Hexagonale Architektur". Sie lernen:
* wann sich der Einsatz Hexagonaler Architektur lohnt,
* wie sich das Muster von anderen (z.B. Onion-Architektur) abgrenzt
* und wie Sie es in der Praxis umsetzen
Mutation Testing with Stryker en de
You write unit tests in your team? Of course you do! But are those tests sufficient? Coverage tools provide an answer.
Unfortunately, coverage analysis is often insufficient. Even test suites with 100% code coverage often miss bugs. Some test suites bring only little added value in practice.
With Mutation Testing you can check the quality of your tests yourself! Stryker puts your tests to the test. You get a more realistic statement, how well your suite can actually find errors and learn how to improve it. The tool integrates into your project and pipeline with little effort and gets results fast!
Learning Objectives:
* Understand why 100% coverage means little
* Integrate Stryker into your own projects
* Improve test suites with the help of mutation reports
Mutation Testing mit Stryker en de
Ihr schreibt Unit-Tests im Team? Natürlich tut ihr das! Aber sind die Tests auch ausreichend? Coverage-Tools haben darauf eine Antwort.
Leider sind Coverage-Analysen aber oft unzureichend. Selbst Test-Suites mit 100% code-coverage übersehen oft Fehler. Manche Test-Suites bringen in der Praxis nur wenig Mehrwert.
Mit Mutation Testing könnt ihr die Qualität eurer Tests selbst prüfen! Stryker stellt eure Tests auf den Prüfstand. Ihr erhaltet eine realistischere Aussage, wie gut eure Suite tatsächlich Fehler finden kann und erfahrt, wie ihr sie verbessert. Das Werkzeug lässt sich mit wenig Aufwand in Projekt und Pipeline integrieren und sorgt schnell für Ergebnisse!
Lernziele:
* Verstehen warum 100% coverage wenig aussagt
* Stryker in eigene Projekte einbinden
* Test-Suites mit Hilfe von Mutation-Reports verbessern
Mini-Workshop: Tidy First? - Mini-Refactorings for better Software Design en de
In his groundbreaking book "TidyFirst?", Kent Beck demonstrates that refactoring doesn't always have to be a daunting, time-consuming task. Even small, incremental "tidyings" can significantly speed up future feature development. This session will delve into the practical application of these "tidyings" (mini-refactorings) on existing legacy code, addressing key questions such as:
* Does tidying up code make economic sense?
* When is the optimal time to tidy up?
* How much cleanup is beneficial?
Participants will gain hands-on experience as we explore and apply these small tidies together in an interactive format. Join us for an engaging session where we will clean up code until it shines, making it more efficient and maintainable. Let's make your code flash and blink with newfound clarity!
Workshop: Schools of Test-Driven-Development en de
Not all TDD is the same. Over the years, developers have developed different styles and approaches. Some of them have a name and are described in detail, such as London or Chicago - the schools of test-driven development.
Here we consider seven different schools of TDD, which differ fundamentally in their methodology. Nevertheless, they are not mutually exclusive. In this workshop, you will have the opportunity to learn about the different schools and which approach is best suited in which context.
After a short introduction, we will try out the different approaches together in pair or mob programming. This way you will not only get to know the theoretical basics, but also practice the practical application.
Tidy First? - Mini-Refactorings für besseres Software Design en de
In seinem bahnbrechenden Buch "TidyFirst?" zeigt Kent Beck, dass Refactoring nicht immer eine entmutigende, zeitaufwändige Aufgabe sein muss. Selbst kleine, inkrementelle "Aufräumarbeiten" können die zukünftige Feature-Entwicklung erheblich beschleunigen. Diese Session wird sich mit der praktischen Anwendung dieser "Aufräumarbeiten" (Mini-Refactorings) auf bestehendem Legacy-Code befassen und dabei zentrale Fragen behandeln wie:
* Macht das Aufräumen von Code wirtschaftlich Sinn?
* Wann ist der optimale Zeitpunkt zum Aufräumen?
* Wie viel Aufräumen ist vorteilhaft?
Funktionale Programmierung und Domain-Driven Design – ein himmlisches Paar! en de
Viele Konzepte, die im Domain-Driven Design (DDD) eine zentrale Rolle spielen, lassen sich mühelos und elegant mit funktionaler Programmierung umsetzen. Dazu gehören:
* Hexagonale Architektur
* Beschreibung von Invarianten
* Zustandslose Dienste
In diesem mitreißenden Vortrag wirst du erleben, wie die Magie der funktionalen Programmierung die Welt des Domain-Driven Design revolutioniert. Wir zeigen dir anhand beeindruckender Beispiele aus funktionalen Sprachen wie Haskell und klassisch genutzten Sprachen wie TypeScript, wie du diese mächtigen Konzepte nahtlos in deine Projekte integrieren kannst.
Erlebe, wie die Integration in klassische Sprachen und Architekturen dir die Tür öffnet, um diese fortschrittlichen Techniken in der Praxis anzuwenden und deine Softwareentwicklung auf ein völlig neues Level zu heben. Lass dich inspirieren und entdecke, wie funktionale Programmierung und Domain-Driven Design zusammen eine unschlagbare Kombination bilden – ein wahres Traumpaar für die moderne Softwareentwicklung!
Workshop: Schulen der testgetriebenen Entwicklung en de
TDD ist nicht gleich TDD. Im Laufe der Jahre haben EntwicklerInnen unterschiedlichste Stile und Herangehensweisen entwickelt. Manche davon haben einen Namen und sind detailliert beschrieben, wie z.B. London oder Chicago - die Schulen der der testgetriebenen Entwicklung.
Wir betrachten hier sieben verschiedene TDD-Schulen, die sich grundlegend in ihrer Methodik unterscheiden. Dennoch schließen sie sich nicht gegenseitig aus. In diesem Workshop habt ihr die Gelegenheit, die verschiedenen Schulen kennen zu lernen und zu erfahren, welcher Ansatz sich in welchem Kontext am besten eignet.
Nach einer kurzen Einführung probieren wir die verschiedenen Ansätze gemeinsam im Pair- oder Mob-Programming aus. Dadurch lernt ihr nicht nur die theoretischen Grundlagen kennen, sondern übt auch gleich den praktischen Einsatz.
Neue Schulen der testgetriebenen Entwicklung de en
TDD ist nicht gleich TDD. Im Laufe der Jahre haben EntwicklerInnen unterschiedlichste Stile und Herangehensweisen entwickelt. Manche davon haben einen Namen und sind detailliert beschrieben, wie z.B. London oder Chicago - die Schulen der der testgetriebenen Entwicklung.
Neben den bewährten TDD-Schulen wie London oder Chicago, gibt es aber auch neuere wie München oder St. Pauli. Wir schauen uns an, was sie zu bieten haben und wann sich der Einsatz lohnt.
Full-Day Workshop: Event-Storming und Domain Modelling mit Mainstream Sprachen de en
Moderne Kollaboration-Methoden wie Event-Storming helfen Fachexpert*Innen und Entwickler*Innen zusammenzubringen. "Domain Modelling" geht dann noch einen Schritt weiter und ermöglicht die gemeinsame Arbeit direkt am Code. Dieser Workshop bietet die Möglichkeit, das Vorgehen an einem praktischen Beispiel zu erproben.
Ihr bekommt einen PO zur Seite gestellt, der euch die Fachlichkeit erklärt. Zunächst erarbeiten wir im Event-Storming das Big Picture. Anschließend modellieren wir in kleinen Gruppen die Domäne mithilfe eines Typsystems. Dafür könnt ihr TypeScript oder Kotlin einsetzen. Das erzwingt Invarianten bereits zur Compilezeit und Fachexpert*Innen haben die Möglichkeit, direkt Feedback zum Code zu geben.
Ziel des Workshops ist es, nicht nur das Typsystem richtig zum Domain Modelling zu verwenden, sondern auch die Kommunikation mit POs, Kunden und anderen Fachexperten zu üben.
New Schools of TDD de en
Not all TDD is the same. Over the years, developers have developed a wide variety of styles and approaches. Some of them have a name and are described in detail, such as London or Chicago - the schools of test-driven development.
In addition to the established TDD schools such as London or Chicago, there are also newer ones such as Munich, Hamburg or St. Pauli. We take a look at what they have to offer and when they are worth using.
Full-Day Workshop: Event-Storming and Domain Modelling with your Programming Language! de en
Modern collaboration methods such as event storming help to bring experts and developers together. "Domain modeling" goes one step further and enables joint work directly on the code. This workshop offers the opportunity to try it out using a practical example.
You will be assigned a PO who will explain the business aspects to you. First, we develop the big picture in event storming. We then model the domain in small groups using a type system. You can use TypeScript or Kotlin for this. We will enforce invariants already at compile time and our domain experts have the opportunity to give direct feedback on the code.
The aim of the workshop is not only to use the type system correctly for domain modeling, but also to practice communicating with POs, customers and other domain experts.
Six-sided websites? Hexagonal frontend architecture! en de
It felt like the acronym WWW stood for Wild Wild West for a long time. Architectural patterns and principles were often the exception in the front end. It was only with the last big wave of frameworks and the triumph of SPAs that a long-needed rethink began.
However, newer technologies do not automatically lead to better architecture. It is still important to use architecture patterns in a targeted manner. One of the best-known patterns in domain-driven design is the hexagonal architecture. When is it worth using and how does it work in practice?
Testing ohne Mocks - TDD im Portland-Style de
Die Portland-Schule der testgetriebenen Entwicklung (TDD) von James Shore beruht auf einer Reihe von Mustern und Konzepten, die zusammen eine eigene Pattern-Language bilden. Zentral ist dabei die Möglichkeit, externe Abhängigkeiten ganz ohne den Einsatz von Mocks, Stubs oder vergleichbaren Hilfsmitteln zu testen. Das Ergebnis sind Tests, die die Vorteile fokussierter Unit-Tests mit denen breit angelegter Integrationstests kombinieren. Der Verzicht auf Mocks vereinfacht das spätere Code-Refactoring erheblich, da die Tests weniger stark an den Production-Code gekoppelt sind. Möglich machen das sogenannte Nullables, die ihrerseits aber ein schmutziges Geheimnis bergen.
In diesem Talk werden wir keine Mühe scheuen, das "schmutzige Geheimnis" der Nullables bloßzustellen. Gleichzeitig lernst Du von den Vorteilen dieses Vorgehens zu profitieren und erhältst einen Überblick über die wichtigsten Konzepte dieser neuen Schule - eine Schule die ungewöhnliche, gewagte Wege geht und klassische Praktiken bewusst in Frage stellt!
Vorläufige Agenda
* Einführung in TDD-Schulen
* Vorstellung der Pattern-Language und Terminolgie der Portland School (z.B. Narrow vs. Broad)
* Vor- und Nachteile integrativer Unit-Tests (und das Beste aus beiden Welten)
* Vor- und Nachteile von Test Doubles (Mocks, Stubs, ...)
* Das Nullable-Pattern
Mini-Workshop: Tidy First? - Mini-Refactorings für besseres Software Design en de
Kent Beck zeigt in seinem neuen Buch "TidyFirst?", dass Refactoring nicht immer aufwendig und langwierig sein muss. Schon kleine "Aufräumereien" können helfen zukünftige Feature-Entwicklung massiv zu beschleunigen. In dieser Session wenden wir "Tidyings" (Mini-Refactorings) auf bestehendem Legacy-Code an und versuchen an der Klärung von Fragen wie diesen:
* Ist das Aufräumen von Code wirtschaftlich sinnvoll?
* Wann sollten wir aufräumen?
* Wieviel Aufräumen ergibt Sinn?
Außerdem werfen wir einen Bilck auf die kleinen Aufräumerein und wenden sie zusammen/interaktiv an.
Kommt zu unserer Session und räumt mit uns zusammen auf, bis der Code blitzt und blinkt!
MAD-TDD - der Wahnsinn hat Methode en de
"Mob AI Driven Test Driven Development" - Wir haben das Buzzword-Bingo gewonnen! Was sich hinter diesem illustrem Begriff verbirgt ist eine Session, bei der wir gemeinsam (im Mob-Programming) die Schnittstelle aus AI-Helpern (Github-Copilot) und testgetriebener Entwicklung (TDD) erforschen.
Was sollten wir generieren und was selbst schreiben? Wie sieht ein guter Workflow aus? Wie stellen wir Qualität sicher, wenn Code generiert wird?
Wir haben nicht auf alle diese Fragen definitive Antworten, aber bei dieser Session habt ihr die Gelegenheit, einige der Antworten selbst zu finden...
Von der Vision zum Code: Domain Modelling - Live! en de
Moderne kollaborative Methoden wie EventStorming helfen, Fachexperten und Entwickler zusammenzubringen. Domain Modeling geht einen Schritt weiter und ermöglicht die gemeinsame Arbeit direkt am Code. In diesem Live-Coding-Event könnt ihr einem praktischen Beispiel zuschauen und mitmachen.
Der Ansatz basiert auf Wlaschins "Domain Modelling made Functional!"
Unser PO, der ein Wine-Tasting-Startup gründet, bringt die Ergebnisse des EventStormings mit. Gemeinsam modellieren PO und Entwickler die Domäne mit Hilfe des TypeScript-Typsystems. Ein Live-Code-Theaterstück, bei dem euer Input gefragt ist!
From Vision to Code: Functional Domain Modelling en de
Modern collaborative methods such as EventStorming help to bring together subject matter experts and developers. Domain Modeling goes one step further and enables joint work directly on the code. In this live coding event you can watch and even participate directly on a practical example.
Our PO brings along the results of an EventStorming. You will get a short overview so you can pretend that you have been involved during the storming. The PO will than explain the requirements to the developer/modelling expert who models the domain according to your suggestions.
The result will be a model of the domain using a type system. We will demonstrate this using TypeScript, but the same approach can be applied using any language with a suitable type system.
Even non-programmers, such as our product owner, will be able to verify the model and provide feedback directly to the developer. The final model, which provides a clear understanding of the invariants and behavior of the system, can be used directly to begin actual implementation by developers. This is the power of functional domain modeling!
Sechseckige Webseiten? Hexagonale Frontend-Architektur! en de
Gefühlt stand das Akronym WWW lange Zeit eher für Wild Wild West. Architekturmuster und -Prinzipien waren im Frontend oft die Ausnahme. Erst mit der letzten großen Frameworkwelle und dem Siegeszug von SPAs begann ein längst notwendiges Umdenken.
Neuere Technologien führen aber nicht automatisch zu einer besseren Architektur. Es gilt, nach wie vor, Architekturmuster gezielt einzusetzen. Eines der bekanntesten Muster im Domain-Driven Design ist die Hexagonale Architektur. Wann lohnt sich der Einsatz und wie funktioniert das in der Praxis?
Developer Week '23 Sessionize Event
Domain-Driven Design Europe 2023 Sessionize Event
WeAreDevelopers World Congress 2022 Sessionize Event
Domain-Driven Design Europe 2021 Sessionize Event
Web Developer Conference 2020 Sessionize Event
Developer Week '20 Sessionize Event
Distributed Domain-Driven Design Day (DDDDD) Sessionize Event
KanDDDinsky Sessionize Event
Marco Emrich
Consultant and software crafter at @codecentric
Nürnberg, Germany
Links
Actions
Please note that Sessionize is not responsible for the accuracy or validity of the data provided by speakers. If you suspect this profile to be fake or spam, please let us know.
Jump to top