In May April, I took a software project with a friend. The basic function of the project is to prepare the payroll details of each employee and send a payroll email to each employee.
Users require that the project be highly flexible, universal, and easy to expand. After a month of hard work, the basic functions required by the project should be implemented. The final result is that the interface is not satisfactory enough to barely implement the function, no architecture, and no scalability. What you do is not satisfied with yourself, let alone the customer's explicit acceptance. In this context, I would like to discuss my views on small-scale project management in a more practical manner. First, let's talk about the lessons learned.
1. Reasonably proposing the project objectives based on its own technical functions is a prerequisite for ensuring the smooth completion of the project. Classify users' needs to meet users' basic needs and meet users' one or two exciting demands. At the beginning, our goal was to use the WPF rich client technology to build applications with flexible and common interface aesthetics. The MVVMLight framework was applied, and the overall architecture was divided into interface layer, implementation layer, and general layer, data communication layer, business logic layer, and presentation layer. In the implementation process, one of the project developers is new to WPF, and the other is not mature enough for the MVVMlight application. Finally, the basic interface is added to the project interface layer, there is no strict Interface Method for newly added requirements. When mvvmlight is used, the upload text box does not display the path of the upload text box. The mail server password cannot be bound in two directions, and the mvvm structure is eventually broken, the final architecture is chaotic, and there is no structure. As a small project, the functions are not complex and the development cycle is short. If a multi-layer architecture is adopted and new technologies are used, the uncertainties of the project and the complexity of the project are undoubtedly increased, in the end, the project was uncontrollable. In the customer's opinion, the several small functions were not completed in a month.
2. Give priority to training and get twice the result with half the effort. In actual development, project members cannot master the technology of each project. When developers do not master a certain technology, the UI will not be implemented after the business logic layer is completed, it is not necessary to integrate project debugging after the UI Layer is completed. However, I am not mature about MVVM applications and encounter technical problems during the process. I cannot solve the problems at the moment and delay the project progress. In the last weekend, he trained me on SVN, And I trained him on the WPF interface. It would take several days to create an example of interface-layer data binding. If he had been trained beforehand, he would get twice the result with half the effort.
3. Sort out requirements cases and clarify the complete project execution process. This helps the overall design of the project and is an important method to reduce the coding workload. Our project division is: I write the requirement case. He is responsible for the requirement survey. The final result is that there are repeated and overlapping parts of the requirement case brought by two people, eventually there are overlapping parts in the structure design, which increases the workload.
4. Effective communication is an effective way to ensure project progress. In the actual communication process, it is best to conduct face-to-face communication, which is most effective. We do not recommend using instant messaging tools. In this way, one party is coding and asking questions, the chat party disrupted the thinking of the other party. On the other hand, communication is often neglected during design, and the actual effect is not achieved.
Suggestion:
1. Development in the same location helps solve problems and reduce communication time and technical costs. At the same time, when the two sides encounter a problem, many people are together, which is conducive to the programming of the team, and is conducive to the discovery and solution of the problem.
2. Develop a project plan, effectively assess project risks, and prioritize project functions.