Johan Martinsson is a freelance developer and craftsman that is passionate, amongst other things, about design in code. He has spent many years helping teams adopt XP-practices, in particular TDD and advanced coding. One of Johan's primary skills is the ability to contaminate almost anyone with at least a few craftsman practices.
Johan favorite way of making his point in conferences is by showing code.
Johan organized the first code retreat in France, organized the first ever Legacy Code Retreat with JB Rainsberger. Since 2009 he co-organizes the Grenoble coding dojo. In 2016 it was at its 130th session! He also co-organizes France's biggest agile event: Agile Grenoble.
What's the main hurdle of doing TDD in our existing codebase? The difficulty of testing the untestable code of our legacy codebase so that it can be refactored into something where it is easy to add functionality using TDD.
But how is this done when I have no separation of layers, no architecture and I can't even mock the database? Well let's see the workflow through a guided workshop of how tests are put in place, how the code is refactored and then finally how tests are separated into different layers of the testing pyramid, and finally how easy it becomes to TDD the new feature!
This demonstrates not only the basic workflow of modern development with legacy code, but also how we can leverage preparatory refactoring to gain time even in the short term, thanks to testing. Additionally it illustrates how respecting the testing pyramid makes a developers life more pleasant.
Code that makes no sense to unit test due to bad design is a common problem. This small example models this problem in realistic way due to its hard-coded integration with external dependencies that cannot be "stubbed out".
Setup here: https://github.com/martinsson/Refactoring-Kata-Lift-Pass-Pricing.
Get rid of whole families of bugs for good with 21 tricks to reduce the space available for bugs.
Bugs are not a fatality, they appear whenever the design allows for it. Learn how to fix the root-causes and how to give an intrinsic quality to your code.
You'll look at static and dynamic typing in a different way. Learn about NoPrimitives, coupling & cohesion, if-less. We'll talk about the feedback-funnel and how it all scales from micro design to micro-services and to macro-design.
Loads of concrete examples and some live coding
Bugs are optional, they get their way into our code much thanks the design choices we do or quite often fail to do.
You'll practice reading code, looking for parts where it is likely that a developer would create a bug if he extended the code. Whenever you've found such a weakness in the design your challenge is to strengthen the design in order to make that kind of bug very unlikely, or even impossible!
You'll practice the procedure of
Did you ever think of the user of your code? Not the one using the application, but the developer that has to change the code after you. Does that person have a good tool for the job, i.e. is the code usable?
What can we learn from other domains where the power of user-centric design was discovered decades ago and led to a win-win situation? Expert designers always repeat that
You're not your user!
It's not the users fault, it's the designs fault.
Why? What does that mean in our world of code, architecture and team practices? You can expect plenty of code illustrating general principles of design and ergonomics. You'll go home with simple but powerful tools.
Our conference is dedicated to providing a harassment-free conference experience for everyone, regardless of gender, gender identity and expression, age, sexual orientation, disability, physical appearance, body size, race, or religion (or lack thereof). We do not tolerate harassment of conference participants in any form. Sexual language and imagery is not appropriate for any conference venue, including talks, workshops, parties, Twitter and other online media. Conference participants violating these rules may be sanctioned or expelled from the conference without a refund at the discretion of the conference organisers.