On Michael Feathers' Keynote: Design Discovery in Existing Systems In his keynote at Domain-Driven Design Europe, Michael provided great insights into aligning code with its conceptual model. He stressed the importance of both top-down and bottom-up approaches. Michael emphasized that domain interrogation, a top-down method, helps gain better domain knowledge. Equally important is the bottom-up approach—learning directly from the code. This means understanding behaviors and concepts that might be scattered across the code. A key question he posed was, “Can we come up with a name for it?” A memorable point was his caution about metaphors, which can hinder understanding—a sentiment echoed by Eric Evans in his masterclass. Michael encouraged using surprises in the code as learning opportunities and mentioned Chesterton's Fence: “Don't tear the fence down until you know why it is there.” In my experience, e.g., modeling contractual models for German pharmacies required both approaches. Top-down modeling provided an overview, while the bottom-up approach revealed intricate details and special cases. This iterative swing ensured a comprehensive model. This keynote reminded me that effective modeling combines both techniques, allowing for incremental evolution. Trust in your ability to balance these approaches is key to successful system design. #DDDEU #SystemDesign #Modelling #LearningFromCode
Sönke Schwenk’s Post
More Relevant Posts
-
Embracing My Introverted Nature for the Love of Software Architecture Life as an introvert can be challenging. I often ponder whether what I am doing is right. Opening up to others takes time, and crowds can be overwhelming. Large gatherings with friends are rare exceptions for me. I need time to regenerate, so if work demands become too much, I sometimes cancel plans with friends, requiring their understanding. Standing in front of groups and networking can be daunting. Yet, I do it all because of my passion for software architecture. I am deeply committed to sharing this passion and helping others succeed. Seeing the people I work with thrive in software architecture and build valuable software using the methods and tools I introduced to them is incredibly rewarding. Their positive feedback and journeys inspire me. The impact they make drives me to push beyond my introverted boundaries. Despite the challenges, the joy of contributing to their growth makes it all worthwhile. If you are an introvert, know that you can achieve great things too. Embrace your passions. Push through the hurdles. And you will find fulfillment in helping others and making a difference. #SoftwareArchitecture #SoftwareDevelopment #Introvert #EmbraceYourNature
To view or add a comment, sign in
-
Your First Step to Mastering Technical Debt What are your open positions? If you want to pay off your debts, you need to know them. With this overview, you can then set up a repayment plan. Of course, you then consider other criteria, such as payment terms and interest rates. But always one step at a time. This also applies to your technical debts. Here, it is a bit more difficult to get an overview because technical debts arise consciously and unconsciously. The latter we can only discover. Nevertheless, your way leads through a list of known technical debts. But such a list is nothing more than a list. Therefore, just start. Take a sheet of paper! Write down every technical debt you are aware of, with: • a name/title, e.g., “Cumbersome visualization interface” • a brief description, e.g., “Every time you visualize a graphical object, you …” • the frequency of occurrence, e.g., “creation about 1x/week, modification 2-3x/week” • first suggestions for improvement, e.g., “code generation, changed interface, …” Within a few minutes, you have worked out a starting point. Now, get to know the point of view of your colleagues in a conversation. Take their comments on board and revise your note – this is now easier to do electronically, e.g., with Jira. In tools, it is best to assign a unique number for identification, which makes references easy. Above all, add technical debt and suggestions for improvement from your colleagues. Only with this information can you seriously think about repayment. By following this approach, you not only create a clear picture of your technical debt but also engage your team in the process. This collaborative effort ensures that you address all aspects of the debt and come up with effective solutions. Trust in your ability to take these steps, and you'll make a significant difference in managing and reducing your technical debt. #SoftwareArchitecture #SoftwareEngineering #TechnicalDebt #Inventory
To view or add a comment, sign in
-
3 Reasons Why Software Developers Should Work on Their Communication Skills Since 20+ years, I have been working with people and companies on building software. Every day, I see how difficult it is to implement what is needed. If you want to understand the ideas of others, you need to interact with them. 1. Gathering the context. You have to discuss the requirements, constraints and business goals. This information shapes your software. Yet, you have to create the common understanding in joint conversations. 2. Selling the plan. As you build complex systems in a team, you have to share your ideas with others. You have to tell, sell and distribute your plan. Therefore, your ability to convey your ideas is crucial. 3. Incorporating feedback. Occasionally, you get things right, sometimes you don't, and every so often the world has changed meanwhile. Whatever happens, you should be able to decode the feedback you get. Only then you can continue to learn and move your software forward. The best you can do for your software is to learn to ask questions, formulate answers and tell stories. In short: Learn communication. #SoftwareArchitecture #Communication #CruicalSkills #Learning
To view or add a comment, sign in
-
Quality is not developed by quality assurance. They just make sure that the defined standards are met. Quality is not achieved by writing clean code alone. That just helps with a few -illities. At least something has been done. Quality is something we have to actively work for: • by gathering requirements • by discussing and weighing options • by testing • by questioning assumptions • by documenting things • by changing perspectives • by crafting architecture • by generating ideas • by thinking about what might happen • by incorporating feedback • by paying attention What would you like to add? #SoftwareQuality #SoftwareArchitecture #Intentional #Care
To view or add a comment, sign in
-
Nobody Wants to Build Bad Software Are you doing bad work on purpose? I've never met anyone who intentionally does a poor job. Not while working in my father's pharmacy. Not as an employee in different companies. Not as a consultant and trainer. Everyone wants to do good work. Whether software developer, software architect, tester, requirements engineer, or administrator, they all aim to excel in their roles. They just sometimes have a different perspective on the software. Therefore, they may have different ideas of what good software is. So their state of mind can lead to unintentional bad outcomes. Use that in your interactions with colleagues: • Look through their eyes at their work before you confront them with your evaluation. • Consider your work from their perspective before rejecting their view out of anger. By understanding and respecting each other's viewpoints, you can foster better collaboration and build great software together. #SoftwareEngineering #SoftwareArchitecture #IntentionalWork #ClarifyPerspective
To view or add a comment, sign in
-
You Want to Change Something in Your Software Development? 3 Excuses You Should Not Tell Yourself Then. Do you just want to, or can you? When it comes to changing the way we work, our processes, tools, etc., I often hear a dichotomy. First comes a clear “I want to change this”. But usually the first excuse follows in the very next sentence. Here are 3 sentences that I hear frequently: 1. That doesn't work for me/us. Of course, there are things that will not work for you. But this sentence indicates that you are looking for excuses instead of getting started. Typically, you don't know what exactly could go wrong. So try it out and start a little experiment, then you will know what worked and what didn't. 2. I have yet to adapt this for us. Sure, everything has to be adapted to the specific situation. That's what you're doing. That's why this statement is a cop-out. If you're telling yourself, you want to stall. Think of change as a series of experiments where you adjust each step based on feedback from the previous ones. 3. This has been proven to work for years. That's right, we've always done it this way. Therefore, we shouldn't put it to the test? Of course not. Be honest with yourself and ask yourself if you are really open to change. And whether you're not telling a lie. Write down the advantages and disadvantages of the tried and true, and contrast them with the possible advantages and disadvantages of the new. (There must always be both!) Which excuse do you want to add? #SoftwareEngineering #SoftwareArchitecture #Excuses #ChangeIt
To view or add a comment, sign in
-
Architectural work is not about you. It's about what's needed. Of course, you should enjoy your work. But you are wrong, • if you want to play new games because you like them • if you hope to implement technology at any cost because you are eager to learn it • If you think your architecture is more important than the team and the collaboration. That is an ego trip. Architecture is about enabling things. It is about solving a business problem. Within the given constraints. That's why it goes beyond a purely technical role. So we listen and clarify requirements. That is why we balance different quality characteristics. That is why we sometimes try to push boundaries. We do what it takes to make and keep software successful. #SoftwareArchitecture #ArchitectureWork #EgoTrip #WhatItTakes
To view or add a comment, sign in
-
A Journey From Music to Software Development Music has been with me my whole life. My mum, being very musical, introduced me to music at an early age. In a group of 2-4 year olds, I learned rhythm with a self-made drum and later the xylophone. When we inherited a piano, my mum encouraged me to take lessons, and I learned children's songs and later classical pieces. At 10, I got a Commodore Amiga 500. I delved into making music with it, sparking my interest in software development. During a project week at school, we made music with computers and synthesizers. I also started playing the clarinet and joined the big band, later adding the saxophone. We enjoyed classic big band pieces from swing, funk, and rock'n'roll. Being part of the band taught me invaluable lessons. I learned: Performing on stage, succeeding and failing as a team, building each other up, organizing, using creativity, letting go, and handling necessary tasks like setup and tuning. These experiences have significantly influenced my whole career. Actually, they made it possible in the first place. It's not always the obvious things that impact your life. Sometimes it's the passions, the hobbies, that open paths you wouldn't have considered. Sometimes it's the unexpected pushes. I'm deeply grateful for that. What has pushed you forward? #SoftwareDevelopment #Music #MyJourney #TheNotSoObviousPath
To view or add a comment, sign in
-
Do You Discuss the Same Points Over and Over Again With Your Software Development Colleagues? 1 Tool to Help You Here Views give insight. Michael Keeling has many helpful tools in his book “Design It.” One of them is “Paths Not Taken,” which helps me avoid repetitive discussions and questions. What is “Paths Not Taken”? It is ultimately a table with two columns: 1. Name of the path not taken (alternative). 2. Short description of why the path was not taken. This table can be easily populated from your architecture decisions. I use it when a discussion doesn't settle down or when I constantly get asked, “Did you also consider XYZ?” You can just refer to the table in those cases. Keeping this table short and focused is important. Don’t overload it with different topics. Otherwise, nobody will read it. If needed, more details can be provided separately. Using this tool has significantly improved my team’s communication and efficiency. It saves time and prevents misunderstandings by providing a clear overview of why certain paths were ruled out. For example, when we chose not to use Angular, communicating this fact and the reasons why helped us avoid revisiting the discussion again and again. Try implementing the “Paths Not Taken” table in your projects. Don't implement it in every case. But if tensions are high and discussions frequent, you can trust in its simplicity and effectiveness. It is easy to implement and can make a big difference. #SoftwareArchitecture #PathsNotTaken #Tool #Decisions
To view or add a comment, sign in
-
3 Truths of Requirements Requirements are the foundation of your architecture work. Early in my career, I struggled to deal with requirements. In my work, I see developers and architects stumble when working on them. Then it seems as if they are literally slipping away. You need to address the following 3 issues: 1. Requirements do not come to you. Requirements must be determined. Of course, others will help you. But in the end, you will always have to find and clarify some requirements. This is especially true for quality requirements! 2. Requirements are never complete. No matter how many people work on them. No matter how much time they spend. You will never know all the requirements for your software in advance. There will always be aspects that are discovered and recognized later. 3. Requirements will change. Software development is a moving target. When people get something, they want more, and they want things differently. Requirements will change too. Accept that and make the best of it. Dealing with the situation is certainly better than being bitter and burning out! #SoftwareArchitecture #Requirements #DealWithIt #Truths
To view or add a comment, sign in