Introduction
Recently asked a question:
Is agile evil? Or under what conditions is this winning approach?
The next 2 responses were roughly as follows:
" Adjail works only if the customer is ready to work in this way. ... But if the customer is not ready to work like this, then it is better not to get involved." ( response from @Qwertiy )
The requirements most often change. "In all the more or less large-scale developments I only worked a couple of times not with Agile ... when the customer gave out really finished TZ. ... In all other works, something was constantly changing (sometimes strongly, ... sometimes weakly ... .) ... "( reply from @avp )
Given the title of this my question, the answers are very much in the subject and very useful. But asking a question, I wanted to know even more. That is, how to organize a project so that a crocodile does not turn out from a product?
Does it not happen that: first, some requirements are implemented -> then new ones come -> a part of what is done -> breaks down - something new is being built on this already curved basis -> and in the end you get a crocodile?
If the output does not produce a product that is suitable both from the inside and the outside, then (I don’t know how to say it), either the Agile approach does not justify itself (or say so) or the project on Agile principles should not have been taken at all.
Question
Advise (options / wisdom / stuffed cones) how to build the code organization process in the Agile approach to fit in with the framework of the approach from t. management (sprints, deadlines, requirements, customers, management), but so that the product can be developed and maintained after delivery ?
Clarification of the issue
- How to initiate the project structure, what should the project framework look like, including the database? After all, usually the project has a database !!. How to deal with database with varying requirements? That is, how to make a flexible frame of the system in order to increase the performance later (throw out, change, add) but at the same time do not do it all over again every time?
Any advice, thoughts, observations, conclusions from experience are interesting.
Update:
Short descriptions of technical solutions are very interesting. For example, from the available answers: to hide the old functionality behind the Facades . Or use units in the database according to the principles of DDD .
Thank!
Crossed out from the old version of the question. In order that there was one question, not a lot.
How to make the product have such an organization code in the future to remain sufficiently "alive" for a long time and serve as a benefit?To meet the new adequate challenges and in an acceptable degree adapt to reality?So that there is no such thing, that the reality has to adapt to the program because of the code structure, because the program does not exactly what is needed, but there is no way to change it (just to make a new product almost from the beginning)?It is clear that there is nothing perfect.It is more likely that the project will not be a failure in the long term.TDD, BDD terms pop up in your mind ... What is their place in the design and implementation?I think there are two extremes.Perfectionism and licking code, when it is not necessary to anyone (on the one hand).And "it works - do not touch it", when everything is confusing inside, but it is necessary to increase the functionality and it is almost impossible (on the other hand).It seems to me that for success both extremes must be avoided.Where is the golden mean?How does the code look like with this golden middle?Even if at first it is clear that the requirements are fuzzy, and the customer is ready to work on the principle of periodic sprints, then this, as I understood only the necessary conditions, but not sufficient ones.Could there be such that if there is no beautiful / good solution for designing the basic basis of the future application (what I called the frame, including the database), then you should abandon the Agile project, or postpone the start of the project (if possible) before clarifying requirements or finding the right design solution?Extended form of the previous paragraph.Suppose there is already a basis from the old software, over which it is necessary to make a new functionality.As is often the case, for good, the old must be concretely, structurally modified, before we build on the new (or even throw out the old).The old is already dead, as it were, but is still in use.The only possibility, as it seems to me, as botanists do, is to stick a small sprig of new to the old trunk so that it will take root and grow into a new tree.That is, with the help of some technical device, use the old system as a black box or as a resource of a new system.If there are no beautiful / good design decisions on modifying or on such ways out of the situation as botanists do, then is this an early sign of a project’s failure in the long term?I understand that this is all theory.In practice, everything is more complicated.Also, I understand that each project has its own situation.Some project will be advantageous even if the organization of the code is tangled, some way around, only if it is not tangled.