<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/you-added-one-feature-and-broke-three-others-rny8pyi8d" -->

---
title: You Added One Feature… and Broke Three Others | daily.dev
description: A practical walkthrough of how adding a single parameter to a booking workflow can cascade into breaking unrelated features like analytics and invoicing. The...
canonical: https://daily.dev/posts/you-added-one-feature-and-broke-three-others-rny8pyi8d
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: You Added One Feature… and Broke Three Others | daily.dev
og:description: A practical walkthrough of how adding a single parameter to a booking workflow can cascade into breaking unrelated features like analytics and invoicing. The...
og:url: https://daily.dev/posts/you-added-one-feature-and-broke-three-others-rny8pyi8d
og:image: https://api.daily.dev/og/posts/RNy8pYi8D.png
og:image:alt: You Added One Feature… and Broke Three Others
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# You Added One Feature… and Broke Three Others

**[ArjanCodes](https://daily.dev/sources/arjancodes)** · 17 min read · 1 upvotes · 0 comments

## Summary

A practical walkthrough of how adding a single parameter to a booking workflow can cascade into breaking unrelated features like analytics and invoicing. The root cause is structural and temporal coupling — when implementation details like a hotel reservation reference spread across multiple parts of a function, every change ripples through the system. The solution involves splitting the monolithic function into clear phases, moving logic into domain objects, encapsulating data behind properties to avoid Law of Demeter violations, and introducing protocol-based abstractions at the boundary between domain logic and infrastructure. The concept of connascence is introduced as a useful metric for measuring how tightly coupled code is and how locally changes stay.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://www.youtube.com/watch?v=UEqk0njCuQo>

## Questions this post answers

### why did adding one parameter to my function break unrelated features like analytics and invoicing

Adding a parameter that gets passed through multiple unrelated parts of a function creates structural coupling: when several features like email, analytics, and invoicing all depend on the same raw implementation detail, changing that detail forces changes everywhere it's used. The fix is centralizing the data inside a domain object like a booking, so other features depend on the object rather than the raw value.

_Explore more breakdowns like this on daily.dev to sharpen how you reason about fragile code before it bites you._

### what is the law of demeter and why does reaching into nested objects make code fragile

The law of Demeter says code should not reach deep into an object's internal structure, such as accessing itinerary.traveler.passport_country across multiple levels, because doing so couples the caller to implementation details that can change. Replacing deep chains with properties or methods on the domain object, like a destination_country property, isolates callers from structural changes.

_Developers debating refactoring approaches often compare notes like this on daily.dev before touching shared code._

### what is connascence in software design

Connascence, a concept introduced by software engineer Meilir Page-Jones in the early 1990s, describes when two pieces of code are connected such that changing one forces you to change the other. It serves as a metric for measuring how well changes stay local in a codebase; reducing connascence, for example by centralizing shared data in a domain object, makes systems more resilient to change.

_Readers tracking design vocabulary like connascence tend to bookmark deep dives like this on daily.dev._

## Similar posts on daily.dev

- [Back to Coupling and Cohesion](https://daily.dev/posts/back-to-coupling-and-cohesion-mey4bh3qy) · Programming Digest · 2 upvotes · 2 comments
- [How I Learned to Structure React Projects Around Change, Not Folders](https://daily.dev/posts/how-i-learned-to-structure-react-projects-around-change-not-folders-ccelaqkhn) · Medium · 121 upvotes · 5 comments

---

Tags: [#general-programming](https://daily.dev/tags/general-programming), [#python](https://daily.dev/tags/python), [#domain-driven-design](https://daily.dev/tags/domain-driven-design)

[View this post on daily.dev](https://daily.dev/posts/you-added-one-feature-and-broke-three-others-rny8pyi8d)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"You Added One Feature… and Broke Three Others","url":"https://daily.dev/posts/you-added-one-feature-and-broke-three-others-rny8pyi8d","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/you-added-one-feature-and-broke-three-others-rny8pyi8d"},"datePublished":"2026-07-24T15:22:33.345Z","dateModified":"2026-09-14T09:17:41.788Z","description":"A practical walkthrough of how adding a single parameter to a booking workflow can cascade into breaking unrelated features like analytics and invoicing. The...","image":"https://i.ytimg.com/vi/UEqk0njCuQo/sddefault.jpg","thumbnailUrl":"https://i.ytimg.com/vi/UEqk0njCuQo/sddefault.jpg","isAccessibleForFree":true,"articleSection":"ArjanCodes","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"ArjanCodes","logo":"https://media.daily.dev/image/upload/s--QX1BCjx9--/f_auto,q_auto/v1777800752/logos/arjancodes?_a=BAMAMiWQ0","url":"https://daily.dev/sources/arjancodes"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/you-added-one-feature-and-broke-three-others-rny8pyi8d","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":1},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"general-programming,python,domain-driven-design","timeRequired":"PT17M","video":{"@type":"VideoObject","name":"You Added One Feature… and Broke Three Others","description":"A practical walkthrough of how adding a single parameter to a booking workflow can cascade into breaking unrelated features like analytics and invoicing. The...","thumbnailUrl":"https://i.ytimg.com/vi/UEqk0njCuQo/sddefault.jpg","uploadDate":"2026-07-24T15:22:33.345Z","duration":"PT17M","url":"https://api.daily.dev/r/RNy8pYi8D","embedUrl":"https://www.youtube.com/embed/UEqk0njCuQo"}}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"ArjanCodes","item":"https://daily.dev/sources/arjancodes"},{"@type":"ListItem","position":3,"name":"You Added One Feature… and Broke Three Others"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/you-added-one-feature-and-broke-three-others-rny8pyi8d#faq","mainEntity":[{"@type":"Question","name":"why did adding one parameter to my function break unrelated features like analytics and invoicing","acceptedAnswer":{"@type":"Answer","text":"Adding a parameter that gets passed through multiple unrelated parts of a function creates structural coupling: when several features like email, analytics, and invoicing all depend on the same raw implementation detail, changing that detail forces changes everywhere it's used. The fix is centralizing the data inside a domain object like a booking, so other features depend on the object rather than the raw value. Explore more breakdowns like this on daily.dev to sharpen how you reason about fragile code before it bites you."}},{"@type":"Question","name":"what is the law of demeter and why does reaching into nested objects make code fragile","acceptedAnswer":{"@type":"Answer","text":"The law of Demeter says code should not reach deep into an object's internal structure, such as accessing itinerary.traveler.passport_country across multiple levels, because doing so couples the caller to implementation details that can change. Replacing deep chains with properties or methods on the domain object, like a destination_country property, isolates callers from structural changes. Developers debating refactoring approaches often compare notes like this on daily.dev before touching shared code."}},{"@type":"Question","name":"what is connascence in software design","acceptedAnswer":{"@type":"Answer","text":"Connascence, a concept introduced by software engineer Meilir Page-Jones in the early 1990s, describes when two pieces of code are connected such that changing one forces you to change the other. It serves as a metric for measuring how well changes stay local in a codebase; reducing connascence, for example by centralizing shared data in a domain object, makes systems more resilient to change. Readers tracking design vocabulary like connascence tend to bookmark deep dives like this on daily.dev."}}]}
```

