photog.social is one of the many independent Mastodon servers you can use to participate in the fediverse.
A place for your photos and banter. Photog first is our motto Please refer to the site rules before posting.

Administered by:

Server stats:

242
active users

#dddesign

0 posts0 participants0 posts today
Asbjørn Ulsberg<p><span class="h-card" translate="no"><a href="https://sfba.social/@williampietri" class="u-url mention" rel="nofollow noopener" target="_blank">@<span>williampietri</span></a></span> You are quite correct, and this is why the idea of software development being a “sociotechnical” practice is gaining traction. <span class="h-card" translate="no"><a href="https://hachyderm.io/@trondhjort" class="u-url mention" rel="nofollow noopener" target="_blank">@<span>trondhjort</span></a></span>, @nick_tune, and others in the <a href="https://icosahedron.website/tags/DDDesign" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>DDDesign</span></a> community writes and talks a about this in length. It’s a tough nut to crack, though. </p><p>Software development is still being seen and marketed as a masculine, technical skill that can (even must) be done successfully in isolation from the people the software is being built to serve. </p><p>This view alienates the very people our field of work need more of to prosper, and locks us into a dark spiral of negative reinforcing toxic masculinity of what I like to call “technical masturbation”.</p><p>An important realization of being a software developer is to acknowledge that since software development is a very young and social science, we understand perhaps even less of what we do than economists do of economics. </p><p>We are mere alchemists throwing ingredients into a cauldron hoping it will turn into gold.</p>
Nick Tune<p>There's quite a few DDD people on Bluesky so I created a list: <a href="https://bsky.app/profile/did:plc:rckvbasit6ovva2bg7dvafdp/lists/3l7y76qe5vz2u" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">bsky.app/profile/did:plc:rckvb</span><span class="invisible">asit6ovva2bg7dvafdp/lists/3l7y76qe5vz2u</span></a></p><p>If you know anyone who should be on the list, let me know.</p><p><a href="https://hachyderm.io/tags/ddd" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>ddd</span></a> <a href="https://hachyderm.io/tags/domainDrivenDesign" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>domainDrivenDesign</span></a> <a href="https://hachyderm.io/tags/ddDesign" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>ddDesign</span></a></p>
Nick Tune<p>Our next DDD London meetup has been scheduled.</p><p>On Tuesday 19th November, Tim Mortimer will be talking about Executable Specifications.</p><p>See you there.</p><p><a href="https://hachyderm.io/tags/dddLondon" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>dddLondon</span></a> <a href="https://hachyderm.io/tags/ddDesign" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>ddDesign</span></a> <a href="https://hachyderm.io/tags/domainDrivenDesign" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>domainDrivenDesign</span></a> <a href="https://hachyderm.io/tags/bdd" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>bdd</span></a></p><p><a href="https://www.meetup.com/dddlondon/events/303976744/" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://www.</span><span class="ellipsis">meetup.com/dddlondon/events/30</span><span class="invisible">3976744/</span></a></p>
Nick Tune<p>Architecture modernization anti-pattern: accessing another subdomain's data from the legacy system* </p><p>When building something new outside the legacy, you might be tempted to go direct to the legacy system to read/write data that you require (via the DB, CDC, or EDA).</p><p>If that data does not conceptually belong to the subdomain that is accessing it, you are breaking encapsulation: you are going via the backdoor to access another subdomain's data</p><p>1/3</p><p><a href="https://hachyderm.io/tags/architectureModernization" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>architectureModernization</span></a> <a href="https://hachyderm.io/tags/ddDesign" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>ddDesign</span></a></p>
Nick Tune<p>Our conceptual understanding of a business domain plays a fundamental role in how we architect our software systems.</p><p>For example, when we have specialised versions of a general concept - do we treat the variability as an attribute or specialized entities?</p><p>See the attached image: if we consider a dealership to be one single entity with different shapes of profile, we might lean more towards a profiles subdomain.</p><p>1/2</p><p><a href="https://hachyderm.io/tags/softwareArchitecutre" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>softwareArchitecutre</span></a> <a href="https://hachyderm.io/tags/ddDesign" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>ddDesign</span></a> <a href="https://hachyderm.io/tags/domainDrivenDesign" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>domainDrivenDesign</span></a></p>
Nick Tune<p>With finest-grained events you would have around 100 event types, whereas only 8 with coarsest-grained events (and there are many variations in-between).</p><p>Your choice could have a massive impact on the complexity and evolvability of your architecture, both for you and the consumers of your events.</p><p>I judge every event on a case-by-case basis, but here are some things I look out for:</p><p>- do consumers have to consume a high volume of events they are not interested in?</p><p>2/3</p><p><a href="https://hachyderm.io/tags/ddDesign" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>ddDesign</span></a> <a href="https://hachyderm.io/tags/eda" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>eda</span></a></p>
Nick Tune<p>Event granularity is often a very tricky aspect of event-driven architecture. It usually requires a very deep understanding of your business domain and product strategy.</p><p>Imagine a company with a product that:</p><p>- has 8 lifecycles steps (e.g. started, cancelled, closed)<br>- has 3 variations<br>- is sold in 4 countries (customised to each)</p><p>1/3</p><p>**<a href="https://hachyderm.io/tags/eventDrivenArchitecture" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>eventDrivenArchitecture</span></a>** **<a href="https://hachyderm.io/tags/softwareArchitecture" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>softwareArchitecture</span></a>** **<a href="https://hachyderm.io/tags/ddDesign" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>ddDesign</span></a>** **<a href="https://hachyderm.io/tags/domainDrivenDesign" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>domainDrivenDesign</span></a>**</p>
Nick Tune<p>Sometimes it’s best not to overdo the "DDD" when shaping the boundaries in your software architecture.</p><p>Using techniques like EventStorming you might achieve a clear conceptual model with well defined subdomains that domain experts agree with.</p><p>But it’s also important to analyse data flows: What information does a subdomain need from other subdomains to apply rules and make decisions?</p><p>Recently I hit this scenario...</p><p>1/2 </p><p>**<a href="https://hachyderm.io/tags/ddDesign" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>ddDesign</span></a> <a href="https://hachyderm.io/tags/ddd" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>ddd</span></a> <a href="https://hachyderm.io/tags/swArch" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>swArch</span></a> <a href="https://hachyderm.io/tags/eda" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>eda</span></a>**</p>
Nick Tune<p>Where should you put the anti-corruption/translation layer when migrating from a legacy system?</p><p>1. in the legacy<br>2. in new code<br>3. a dedicate translator service</p><p>A benefit of 1: fully encapsulate the legacy model and prevent it leaking</p><p>A benefit of 2: teams don't have to make PRs in multiple codebases for the same feature (when the ACL needs to change)</p><p>1/2</p><p><a href="https://hachyderm.io/tags/architectureModernization" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>architectureModernization</span></a> <a href="https://hachyderm.io/tags/legacyMigration" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>legacyMigration</span></a> <a href="https://hachyderm.io/tags/softwareArchitecture" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>softwareArchitecture</span></a> <a href="https://hachyderm.io/tags/ddDesign" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>ddDesign</span></a> <a href="https://hachyderm.io/tags/domainDrivenDesign" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>domainDrivenDesign</span></a></p>
Nick Tune<p>If you are looking for top-notch conferences to speak at then check-out Explore DDD which is held in Denver in April.</p><p>The CFP is open until the end of this month.</p><p>I've been to the conference numerous times and I'm always very happy to fully endorse Paul Rayner and his team for putting on a great event and treating speakers outstandingly well.</p><p>It's a community of enthusiastic learners and nice people.</p><p><a href="https://exploreddd.com/cfp/" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="">exploreddd.com/cfp/</span><span class="invisible"></span></a></p><p><a href="https://hachyderm.io/tags/ddd" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>ddd</span></a> <a href="https://hachyderm.io/tags/ddDesign" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>ddDesign</span></a> <a href="https://hachyderm.io/tags/domainDrivenDesign" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>domainDrivenDesign</span></a> <a href="https://hachyderm.io/tags/softwareArchitecture" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>softwareArchitecture</span></a></p>
Nick Tune<p>When modernizing your legacy systems, be careful not to automatically assume that the language your business and domain experts use is correct and should be reflected in your new architecture.</p><p>Their language might be influenced by your legacy systems and not an accurate reflection of the concepts in your domain.</p><p>Here is the kind of conversation I've had many times...</p><p>1/3</p><p><a href="https://hachyderm.io/tags/ddDesign" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>ddDesign</span></a> <a href="https://hachyderm.io/tags/domainDrivenDesign" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>domainDrivenDesign</span></a> <a href="https://hachyderm.io/tags/softwareArchitecture" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>softwareArchitecture</span></a> <a href="https://hachyderm.io/tags/architectureModernization" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>architectureModernization</span></a> <a href="https://hachyderm.io/tags/archModernization" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>archModernization</span></a></p>
Nick Tune<p>- are there any business rules or calculations that span all of this data? </p><p>- does all of this data need to always be consistent?</p><p>If you answer "no" to both, you should consider aggregating the data in the UI or a BFF.</p><p>But you may also need to do advanced searching across the combined data. This could push you towards a single subsystem although a separate search-oriented subsystem is a common option (especially as you need to search across more diverse data).</p><p>2/2</p><p><a href="https://hachyderm.io/tags/ddd" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>ddd</span></a> <a href="https://hachyderm.io/tags/ddDesign" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>ddDesign</span></a> <a href="https://hachyderm.io/tags/swArch" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>swArch</span></a></p>
Nick Tune<p>...to group these in an email validation component because they are both rules about email. </p><p>But they are not the same type of rule and serve different purposes. </p><p>Rules that don't depend on state are often good candidates for value objects</p><p><a href="https://hachyderm.io/tags/ddDesign" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>ddDesign</span></a></p>
Nick Tune<p>Is my table really an address? </p><p>Or is this company starting to stretch their software to support use cases it wasn't originally designed for?</p><p>Is this a harmless hack or are they taking the current domain model in a bad direction?</p><p>The ravioli was good in any case.</p><p><a href="https://hachyderm.io/tags/ddDesign" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>ddDesign</span></a> <a href="https://hachyderm.io/tags/domainDrivenDesign" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>domainDrivenDesign</span></a> <a href="https://hachyderm.io/tags/architectureModernization" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>architectureModernization</span></a></p>
Nick Tune<p>1. which team has the best knowledge of this concept?</p><p>2. which team works on features most related to this?</p><p>3. which team's cognitive load will be impacted the most by this?</p><p>4. which team will be incentivized to build the best implementation?</p><p>5. which team works closest with the relevant domain experts?</p><p>This isn't the only important aspect, but it is an important one.</p><p>2/2</p><p><a href="https://hachyderm.io/tags/socioTechnicalArchitecture" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>socioTechnicalArchitecture</span></a> <a href="https://hachyderm.io/tags/softwareArchitecture" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>softwareArchitecture</span></a> <a href="https://hachyderm.io/tags/ddd" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>ddd</span></a> <a href="https://hachyderm.io/tags/domainDrivenDesign" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>domainDrivenDesign</span></a> <a href="https://hachyderm.io/tags/eventDrivenArchitecture" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>eventDrivenArchitecture</span></a> <a href="https://hachyderm.io/tags/ddDesign" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>ddDesign</span></a></p>
Nick Tune<p>....and they are expensive to undo later, so you continue layering on new features exacerbating the problem. </p><p>To be honest, it's inevitable. We can't predict the future. But that doesn't mean just YOLO everything.</p><p>We can try to better understand where the business is heading, and we can speak up when it's time to stop adding more layers and fix the foundations.</p><p>2/2</p><p><a href="https://hachyderm.io/tags/ddDesign" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>ddDesign</span></a> <a href="https://hachyderm.io/tags/softwareArchitecture" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>softwareArchitecture</span></a></p>
Nick Tune<p>One of the most fascinating things about software architecture is how choices in the past can have such a strong influence on the system for years to come. </p><p>You might make a decision that seems trivial at the time, but new features get layered on top of your design's assumptions.</p><p>These bakediin constraints limit how you can evolve the system,...</p><p>1/2 </p><p><a href="https://hachyderm.io/tags/softwareArchitecture" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>softwareArchitecture</span></a> <a href="https://hachyderm.io/tags/architectureModernization" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>architectureModernization</span></a> <a href="https://hachyderm.io/tags/ddd" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>ddd</span></a> <a href="https://hachyderm.io/tags/domainDrivenDesign" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>domainDrivenDesign</span></a> <a href="https://hachyderm.io/tags/ddDesign" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>ddDesign</span></a></p>
Nick Tune<p>When beginning to modernize, should you start by designing the future state or spend some time exploring the current state?</p><p>Sometimes people say "What's the point looking at the past? Let's go straight to the future state!"</p><p>However, your existing systems and processes contain a lot of knowledge. Naively jumping to the future state without understanding the workings and constraints…</p><p>1/2</p><p><a href="https://hachyderm.io/tags/architectureModernization" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>architectureModernization</span></a> <a href="https://hachyderm.io/tags/legacyMigration" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>legacyMigration</span></a> <a href="https://hachyderm.io/tags/ddd" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>ddd</span></a> <a href="https://hachyderm.io/tags/domainDrivenDesign" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>domainDrivenDesign</span></a> <a href="https://hachyderm.io/tags/ddDesign" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>ddDesign</span></a> <a href="https://hachyderm.io/tags/eventStorming" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>eventStorming</span></a></p>
Nick Tune<p>.....helping business and technology people map out specific scenarios.</p><p>This technique also forms a key part of Eric Evans Model Exploration Whirlpool which is also highly recommended.</p><p><a href="https://www.domainlanguage.com/ddd/whirlpool/" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://www.</span><span class="ellipsis">domainlanguage.com/ddd/whirlpo</span><span class="invisible">ol/</span></a></p><p>2/2</p><p><a href="https://hachyderm.io/tags/ddd" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>ddd</span></a> <a href="https://hachyderm.io/tags/ddDesign" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>ddDesign</span></a> <a href="https://hachyderm.io/tags/domainDrivenDesign" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>domainDrivenDesign</span></a> <a href="https://hachyderm.io/tags/softwareArchitecture" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>softwareArchitecture</span></a></p>
Nick Tune<p>It was wonderful watching <span class="h-card" translate="no"><a href="https://mastodon.social/@yellowbrickc" class="u-url mention" rel="nofollow noopener" target="_blank">@<span>yellowbrickc</span></a></span> facilitate a DDD/architecture workshop yesterday at PayFit France.</p><p>She demonstrated one of the most effective, and simplest, techniques to perfection "Talk me through a concrete use case".</p><p>She quickly helped a group map out the details and then make a decision about their architecture. It was really impressive.</p><p>If you want to become a good facilitator then I recommend getting good at this skill.</p><p>1/2</p><p><a href="https://hachyderm.io/tags/ddd" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>ddd</span></a> <a href="https://hachyderm.io/tags/ddDesign" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>ddDesign</span></a> <a href="https://hachyderm.io/tags/softwareArchitecture" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>softwareArchitecture</span></a></p>