Experiences in software development philosophy
"Confirm that you have understood the problem, and a small and talented team will implement the solution, and ask your customers to tell you how to improve it. this is all; others are annotations. "(software development philosophy, from <clouds to code Chinese version>)
After so long of development, we can see that this development philosophy is very relevant. The main points of software development are summarized.
"Confirm that you have understood the problem", that is, the requirement problem. It is a macro-level understanding and analysis of the commercial purpose of the software and the functional requirements at the micro level. Based on my development experience, it is to obtain a requirement and understand it correctly. We often cannot fully understand the problem of the requirement. In most cases, the problem is in a state of mutual understanding, in various situations, the acquisition requirements are not true and valid. The main reasons are as follows:
1. The customer's requirements cannot be fully explained.
2. the business logic is indeed very complex, and there are a wide range of related connections, resulting in a limited understanding of the problem (5 ~ The complexity of seven associations is hard to understand if it exceeds the limit)
3. There is a deviation between the acquisition of requirements and the various stages of design and implementation. More seriously, the defects caused by the original real requirements cannot be traced back.
4. In the software development process, the customer's actual situation has changed, or the customer has changed the original idea.
There are many ways to solve these contradictions, mainly in the experience of demand development, the experience of design and development, the combination of teams, effective and comprehensive requirements record and tracking, we can also review requirements at various stages to ensure our understanding of requirements.
"A small and talented team is responsible for implementing the solution", that is, the problem of team cooperation and development skills.
A high-quality team has always been the guarantee for successful software development. Otherwise, software development may easily fall into despair.
As for the team, I mainly put forward some opinions based on my experience.
1. Ensure team Stability
The core members of the team should be stable. For example, a team must confirm which members are the core of the team and ensure the stability of these core personnel during the software development cycle, it is best to ensure the stability of the core members of the team on the organization side, not just in a project cycle, so that the team can continue to improve, accumulate experience, and more importantly, the effectiveness of cooperation, you need to know that a person is updated frequently, or the efficiency and cooperation of the team just created are very poor. It takes a long time to work in and exercise, but it often leads to software development failure, the reason is that, while you establish effective cooperation and development processes for new teams, software development has already experienced hundreds of errors, planting the seeds of failure, and the price to remedy later will be too high. therefore, establishing a stable development team is an effective guarantee for software development.
2. reasonable and effective team development planning.
1 ). clear and effective team goals. set up a clear and effective goal for the team, so that the core members of the team can agree with this goal, and associate this goal with their own development, giving everyone the motivation and hope to move forward. this is also an important guarantee for the stability of the team. Without a team with the same goal and goal, it is difficult to have cohesion and become a high-quality team.
2) Reasonable complementarity among team members.
We need to set a baseline for all aspects of the team's capabilities. Each member cannot be lower than this benchmark. Otherwise, the overall strength of the team will be affected.
On this benchmark line, we do not require every Member to be excellent in all aspects (this is also difficult to achieve), but it will certainly require each member to be above the benchmark in a certain aspect, in this way, a complementary team can be established based on special capabilities.
For example, to achieve a baseline for analysis, design, coding, and other work capabilities, a development team administrator must be above the baseline and have excellent management capabilities. rather than let a person with mediocre or other capabilities (such as excellent coding capabilities) act as a manager. in this way, we can find excellent people in all aspects of our work to achieve the goal of establishing complementary teams.
At the same time, the Team members can learn from others to improve the team's ability in all aspects, so as to achieve the goal of team development.
3) Other supplementary strategies and systems cannot be ignored.
First of all, the team should have a fair and just atmosphere in which everyone's abilities and performance should be consistent with their rewards and positions in the team to form a good team development environment.
Second, while ensuring the stability of core members, reasonable team mobility is also necessary, because each team member cannot meet the development requirements of the team, therefore, we should replace unsuitable personnel, absorb new members, develop excellent members into core personnel, expand the team, and form a good team metabolism model.
Third, it is a very important factor for the development of the team to be recognized by the management team, encourage team changes, encourage innovation, and be willing to take appropriate risks, this also requires the team to continuously succeed, create performance, and communicate well to obtain support from the management.
"And ask your customers to tell you how to improve it." My understanding here is not only about customers, but also about the market.
The most important purpose of developed software is to meet the customer's needs and market needs. guiding customers and the market in the development direction of our software is an important guarantee for the lucrative benefits of the software and an important goal of software development. of course, this is based on our ability to correctly understand the customer's needs and market needs.
"This is all; others are annotations. "Here, I understand the requirements mentioned above in software development. The main focus of the team, customer, and market is on other auxiliary aspects, such as process improvement, checks and monitoring are all effective tools and processes that focus on the main points of attention. We need to differentiate the primary and secondary points, rather than focusing on these auxiliary work aspects, ignoring the real key to the success of software development. based on experience, if the software development team does not understand the requirements, and there is no good development team, the customer and the market are also vague, but on the contrary, they should focus on file form specifications and process improvement, ISO, cmme, and other related transactions. In this case, even if these operations are good, can our software development be successful. it is the right way to clear the primary and secondary issues and reasonably apply other auxiliary transactions.
To sum up, I have summarized my experiences in software development. Software development needs to be customer-oriented and market-oriented to understand the real needs of software, and use high-quality teams for development, to maximize the commercial benefits.