Several people in the Agile community believe in Emergent Design. But I think that it has caused many disasters in software development projects. See below some hilarious pictures of Emergent Design in practice, with fictional conversations illustrating the kind of thinking that generated them…
1) Commenting-Out
PM: Look, the requirements were changed, we will have to modify these stairs.
Dev: It will be too difficult to modify them, I will simply write new ones.
PM: So will you delete the previous ones?
Dev: No need to delete, I will comment them out, they may be useful in the future.
2) Connecting Modules
PM: You designed the stairs between floors, but you did not design the connection between stairs.
Dev: This should not be a problem, after having the stairs it is very easy to connect between them.
3) Adding New Features
PM: There is a very wide space here, I think we should add some benches.
Dev: No problem, benches are very modular, I can easily plug them here.
4) Emergent Design
PM: You have designed the floors, but you did not design the stairs connecting them.
Dev: Don’t worry, after we have the floors it is very easy to add the stairs.
5) Partial Requirements
PM: Sincerely, I am not sure that the system you implemented is what the customer expected…
Dev: You can check the requirements, our system satisfies perfectly all the customer requirements.
6) Choosing a Platform
PM: Ideally this system should be built on top of a land-based platform.
Dev: Land is too expensive, I suggest we use old tires instead.
PM: Are you sure that old tires would be a good technology choice for this project?
Dev: No doubt, old tires are cheap, very modular and can be combined in multiple ways.
7) Cross-Cutting Concerns
PM: I see in your design that there is some coupling between the building columns and the passage.
Dev: This should not be a concern, both can perform their function despite this small coupling.