• People have already mentioned testing and abstraction, but what about other developers and security?

    Spaghetti code all you like in solo projects. But if someone else is coming along to debug a problem in their toppings, why would you make them remember anything about baking or the box when it’s completely irrelevant?

    And why should the Box object be able to access anything about the Oven’s functionality or properties? Enjoy your oven fire and spam orders when someone works out they can trigger the bake function or access an Order’s payment details from a security hole in the Box object implementation.

    It’s not just about readability as a narrative, even if that feels intuitive. It’s also about memory management, collaboration and security.