How did you develop software?
There is a common dispute between people who write software for their lives. Some people insist that there must be a complete model before writing the code, and those who are prematurely encoding are just some "in Hell in Hell".
Then there will be another group of people say, hey! Wait. You can't learn enough knowledge from a simple pre-model. You have to write some form of code. Otherwise, you are likely to miss some important details and even create a model that cannot be built.
correct answer
So, which party is correct? Is the one who invaded in the code all day? Still insisting on building a model of the world's perceived model before thinking about the code?
Well, they are somewhat correct. At least, they are trying to solve the same problem - get enough knowledge that is properly implemented.
Please note that the projects in software projects and other engineering disciplines are different. Software projects are essentially a centered project. Over time, you will learn more about you and your team. You know the customer, application, environment, and initiator will also increase with the progress of the project.
You must have to prepare for the new discovery knowledge. The wrong mistake of a typical waterfall is that there is no feedback at all. In the waterfall model, any discovery in the low-level encoding cannot affect the demand and architecture. However, these low-level details often have a far-reaching impact on things that understand higher layers.
reduce risk
Reducing the risk is the core of traditional engineering. When building a bridge, you will not consider building it into a perfect bridge that will never collapse. Instead, you will only consider it to withstand the wind blow of 500 years, flooding in 200 years, up to 3 times the expected load, and so on. If you don't do these design weigh, then all bridges will be a solid concrete from the bridged to the ground, there will be 500 feet wide. All of the project is to do these compromises, the software engineering is also the case.
The difficulty of software engineering is that most of the risks exist in the process of building its process and the completed structure. The reason is the essence of its discovery.
I know that I have to discover in advance, then the core is to minimize the risk of what you find.
Those who directly go directly to the pieces have been caught in trouble before the start: (due to the increased knowledge) The direction is most difficult, and most expensive.
Those who recommend building a full model before doing any implementation, and also braving the risk of important discovery during the creation of product code. As a model of real abstract version, you will inevitably lose some details. Devils are likely to latenate in these details.
As a result, some people try to balance between the two extremes, and they create a certain model, they do some coding, they use one-time prototype or code tracelet to model. There are many discussions on this topic in UseNEN to focus on width priority or depth priority; when modeling, and when coding, etc. Different methods will give different recommendations for this issue.
The method is our own
Extreme programming is based on the premise of reducing risk, all other popular design methods are to some extent, whether they recognize this.
The disclosed method is attempting to answer the following question: "In order to create a software system, I will get the most problematic field and solution field knowledge in the most economical approach."
It is clear that the risk is inherently in the discovery process of the project. However, the discovery is always in progress, we cannot withstand the major discovery of the later game. Ideally, we hope to know everything we want to know in advance and fully understand them. Reality is certainly won't be like this, so each method is trying to create an environment, where you can make the most important discovery as soon as possible. A specific method is the most valuable thing in how it reduces the risk of key discovery in advanced.
However, these answers are different for everyone. The answer is related to your team, project, experience, problem, working environment, etc. If you have found a method is very suitable for a project, no one can guarantee that it is suitable for the next project. If any of the factors listed, it is likely to be revised. It is not perfect
You have seen that it is not perfect for the rustic beauty of the algorithm or the rugged machine instruction sequence. Procedures and methods rely on people to maintain them, understand the elements that will be checked. And people are very easy to make mistakes.
So in the end, we will return to the idea of management weighing. You can waste 6 months in an object model of a project, and the results have found your mistakes during the implementation of your mistakes. You can start this very early, lock your own design and architecture that you can't support some important needs you don't know.
Alternatively, you can evaluate the trade-offs to minimize the total risks, then analyze a little, design, coding. The relative proportion, order, feedback of each task - all of these for each project, each practitioner is different. There is no answer to any time and any occasion. Therefore, it is necessary to pay attention to effectiveness, making the best choice for current issues, current team, current environment.
So, when you take a computer next time, it is an artistic discussion of the art. Please consider the art of weighing. Other engineering subjects must be based on the trade-offs related to the physical world; we have to face and our own trade-off.
Then we can start developing software.