I didn't expect to write a follow up to my post on architecture, organization, and ownership so soon, but I had a new use case come up that I couldn't pass up discussing.
So this team came to me to ask my advice about a new integration they were planning. They have two existing services on ECS, and they want them to communicate asynchronously via SNS and SQS.
The first service would send a message to a Topic, which would fan out to subscriptions. They would follow the best practice of putting a Queue as the endpoint, for rate-limiting and retrying purposes, between the topic and a Lambda Function. The Function would then process the message and perform an action on the second service.

Their problem statement: They needed to come up with a plan to organize, on the developer-side, the Infrastructure-as-Code that would make this happen.
It was a design question about which service owned which resources, so they could potentially optimize their workflow.
Their first thought was the following:
"The Topic serves as Service 1's 'notification sender', and the Queues' and Lambdas' purpose is to handle those message for the sake of Service 2. So, we should deploy the topic with Service 1 and the other pieces with Service 2!"
Which, on the surface, sounds incredibly reasonable. Its logical flow and ownership structure seems clear. It would ensure that you know where a component belongs, so that it can be updated alongside its 'owning' Service.

There are two quirks with this design, of course, which I explained.
The tech lead I was talking to was okay with these conditions but I could tell he was reluctant about it.
In the back of my head I was also unsure about the game plan, but we talked for a while more, coordinating as if we were moving forward.
And then, towards the end of the meeting, I interrupted and said, "Wait a minute, I have another idea."
I saw what potentially many of you saw when taking a look at that first diagram. The infrastructure enabling async communication between the two services could instead be grouped together and deployed as a cohesive unit!

This has multiple advantages:
The key piece to this story that enables us to go the separated-component route is that there are no current plans from the development team to expand the final endpoint of the asynchronous notifications to other services, much less those not owned by the team.
This is the ideal of a self-contained system. "It just works" because the team owns all the components. That means they can optimize their resource architectures to their optimal workload and processes.
The team is now pursuing this option, all of us relieved at the prospect of easier maintainability.
Just because the purpose of the Topic is to be the 'notification center' for Service 1, does not mean that it has to be dogmatically attached to Service 1 just for the sake of Ownership Consistency (TM), if it's going to make the team's life harder in maintaining that stack both in the present and into the future.
The team wants to deliver. The team is always looking to strike a balance between quick iteration and reducing technical debt for later.
Ownership rules keep things simple, until they don't. In those cases, break ownership rules to make your life easier and deliver faster.