As soon as you get deep into using static types to model your domain, you run into the problem that types don't represent reality.
You have a type Dog
You have a type Robot.
Robot has a Camera.
But then, the customer gets an idea to attach that fricking GoPro Hero on a Dog.
Suddenly, a Dog has a Camera.
But just this one Dog. But in your type system, you need to recognize that for the whole type.
Dog is Camera-attachable (implements an interface) and has a Camera attribute.
Then, you will not believe it, someone gets an idea to attach the camera on a Donkey.
Donkey has a Camera.
So do you keep that attribute .camera only on Dog and Donkey classes, or will you attribute it to all Animal classes?
Then, that customer gets an idea to put the camera on the Chimney.
So now, Chimney has a Camera. Dog and Donkey used to have it, they don't now. .camera attribute is null. But you keep supporting it, because it is possible.
But then the customer starts speaking about putting the camera on the Ladder.
Heck, so I guess, I have to make generic Object to implement CameraAttachable. All objects will have to implement it.
Then, you will not believe me, the customer buys the second camera. He attaches both cameras on a Horse.
Do you have attributes camera1 and camera2, or will you define a Camera[] cameras attribute?
--
Then, the customer stops buying and moving cameras. Finally!
So you build your app.
Your datamodel depends on all those animals, house and objects on or around the house, and those two cameras.
--
Then, you will not believe me this time.
The customer moves to a completely new house. This time, instead of animals, he loves old cars.
He might be attaching Cameras to those cars. But he will also be adding Lights, and Stickers.
The new house doesn't have a Ladder. But it has two Chimney.
You got 2 weeks to rewrite your software for this new reality.
--
Is it a problem? Yes!
It is a problem of the customer? Nope.
It's a problem of how difficult it is to capture reality and its shape. The more you are invested in Domain modelling, Typing (no anemic types and models), exactness of all that, the harder it is to change it.
And one thing I have learned is: Every successful system evolves, because its underlying reality changes. Forever!