Implementation conception of software development and standardized pipeline development
I recently saw a blog post discussing the topic of standardized pipeline development mode. However, this blog post only raised this question and did not respond.
This is actually a big problem. I have been engaged in software development for so many years, but I still haven't seen any domestic company actually do it. I have been thinking about this. I have been trying to implement this model for a long time, but I still have no improvement. From this, I have not only learned some experience, but also know its difficulties. I will share my experience with me through this blog post.
ØOne question is: What is the standardization and pipeline development model? Why?
We may not know much about the standardization and pipeline development models. Let's elaborate on them first. The standardization and pipeline development modes are used to standardize software modules. The software development process is the same as the pipeline operations in the production workshop, all software engineers only need to select appropriate modules (raw materials) from the module library according to the software design specifications, and then write programs for assembly, testing and release.
This development model is extremely efficient and requires extremely low levels of programmers. This not only improves the efficiency of software systems, but also greatly reduces labor costs, to fully implement mass production and development of software, the implementation of this model is indeed very urgent for a company.
ØAnother question is, why did the domestic software companies fail to successfully implement this development model?
First of all, we need to explain that we do not want to think that Chinese companies do not want to implement it. In fact, we dream about it all, but why can't we implement it successfully? I think there are the following points;
The goals and needs of most domestic companies are unclear. We can find that one of the biggest characteristics of Chinese companies is that there are many product types. In fact, this is nothing. The most terrible thing is that there are many types of products in the industry. For example, some companies have both coal mine security monitoring products, electronic consumption products, and even ERP products. In fact, looking at the details, none of the products of these companies already have a certain scale. As you can imagine, the accumulation of these companies in these industries seems to be too small, it is basically impossible to extract the software modules in this industry, or the modules cannot meet general standards. Therefore, we often find that most of the company's engineers are modifying the original modules to meet the needs of various customers. Over time, it is difficult to unify the software modules and maintain them abnormally, how can we standardize and streamline people! In fact, the reason for the conclusion is that custom products are the reasons why the company cannot successfully implement the standardized and streamlined development models. In this case, we may go back to the "chicken" and "egg" issues, let's take a closer look!
The management and programmers of Chinese companies are too young. Among so many companies, we may find that all Chinese companies are adolescent companies, and some system engineers who have been working for a year or two are, after two or three years of work, I am a Project Manager or department manager. As you can imagine, in a Chinese environment, such a job is promoted, which breaks the technical prospects and accumulation of these people. Since then, these people have been constantly dealing with the root market, and learning the market has neglected the learning and accumulation of technology. After so long, the company's senior leadership have a market vision, however, it breaks away the creativity of engineering technology, so it will not be able to grasp the grass-roots development process of the project, let alone discuss the standardization and pipeline operations. This is why some companies have been developing for dozens of years and cannot grow any longer-because they are already in the cycle of a strange circle of talent, and then they will find that talent flows frequently, short talent cycle and other phenomena.
Domestic companies lack the awareness and investment of Project Summary and software restructuring. Many domestic companies rely on customized projects to survive. Some projects are urgent and need to be developed quickly. As we all know, such rapid development is based entirely on mature technologies. Due to the urgent time, it is most urgent to release executable software, the purpose of everyone's work is to catch up with time, catch up with projects, and catch up with "release". However, this is not only difficult, but we often find that after the software is released, once it is recognized by users, this project is completed, and the project team will be dismissed from other projects after a simple project summary, system re-analysis and module re-construction are not required, or even no archiving is performed. In this way, the experience gained from this project belongs to the personal experience of the project team members rather than the technical accumulation of the company. Once a programmer leaves the company, the accumulated experience (software module) in the project will no longer follow. The IT industry is at least a high-mobility industry in China. Therefore, for domestic IT enterprises, technological accumulation is also extremely difficult. In fact, in my opinion, a company with relatively high talent mobility has less technical experience than some companies with relatively stable business experience in the past 10 years.
ØSo how should we implement the software standardization and pipeline development model?
During my software development career, I was always thinking about how to standardize software and develop pipeline models. I have been engaged in application development, basic device driver development, and kernel development. In each development process, I try to find the Development Mode and try my best to standardize and streamline tasks to improve development efficiency. Although we have not yet come to a mature solution over the years, we have gained some experience. Let's share it with you;
First, standardize the development process as much as possible, and use documents as milestones in the development process.
Many documents are ignored during the rapid development of projects, or there are only a small number of documents. There are no software development processes, such as requirement analysis, architecture design, and detailed design, but the code is developed and written as soon as the project comes up. In this case, if the project is relatively large, it will be uncontrollable in the later stages of development. I remember that in the past few years, I developed a financial system. It was the first time I was the project owner. It took a long time to develop a financial system, we immediately organized personnel to perform simple analysis and module division before developing and writing code. 1.5 months later, we developed the software and deployed it on the server after testing, then we will not ask this system again. One day, my boss suddenly called me and said that the financial system caused a loss of 0.18 million. At that time, I was shocked (not because of the amount, but because I had no clue in my mind ), then I immediately organized a person to review the code. When I reached the code again, it seemed that the code was a stranger because there was no document, some complex algorithms in the program have been forgotten, and there is no evidence at all. The algorithm process can only be computed from the beginning to the end without repetition. During that time, it is thrilling. Later, I tried to standardize the development process in any project to avoid this kind of thing.
The purpose of the software standardization and pipeline development model is to develop a large number of software products. Under this premise, if the software development process is not standard enough and the documents are incomplete, therefore, the company needs to invest multiple times of technical support to make up for these defects and solve this "rootless" problem. Therefore, software standardization and pipeline development models must first standardize the software development process and take (important) documents as milestones for development.
Second, the software modules are more abstract and refined, and the hierarchy is more reasonable.
In the software architecture, it is very important to divide the software into layers and refine the modules. I have read a book "design patterns" before, and the content of this book is summarized in one sentence as "hierarchy, module abstraction and refinement, high cohesion and low coupling ". In terms of standardization and pipeline development models, this is even more important and a prerequisite for implementation.
When I was developing some management systems in the past few years, every time I saw a teacher (Wang Jiawei, a famous data design expert in Chongqing) Send me a data logic model, you will always find that this model is always the same as the previous model, for example, the user management module. In this way, the module code I previously compiled can be fully reused, saving the development time. At that time, I was thinking that if every module can be abstracted and refined into a classic module, we will be able to directly reference it during the next development process, which would save much time, new projects need to be developed, that is, the business layer.
During the first development of the management system, I had never been able to control the MVC mode. Although I had enough to talk about it, I did not have. After the first project, I participated in another slightly larger project and developed it with a senior engineer. When he gave me the project design book, he proposed a layer-4 MVC model, model, Dal, BLL, and web layer-4 development mode. This caused me to think deeply about the MVC model. As the project experience increases, I gradually realized that the MVC model is a classic model and has nothing to do with it. Its purpose is to tell you, during software design, the software should be layered to reduce the coupling between the modules and layers of the system. In the later development process, at most, I also designed an 8-layer MVC development mode.
Later, I slowly discovered that an appropriate system-level model for a classic module application will greatly shorten the entire project development cycle and increase stability. Therefore, in my opinion, if the standard (Classic) module and reasonable hierarchy are left, it would be "too talkative!
3. Incorporate project summary, module standardization, software reconstruction, and module extraction into the development cycle.
As described above, many companies often ignore the work of project summarization and software (module) reconstruction in order to catch up with projects.
Programmers with some project development experience will find that the customer's requirements are always changing, and some similar modules in the previous project always need some changes to adapt to the needs of new projects.
Indeed, I always met, but I changed the method later. After each project, I will analyze, reconstruct, and finally extract some of the typical modules of the project to build my own module library. Next time I use it, I will be able to directly use it, or make a few modifications to meet the new requirements. I have already achieved some results in this method, and I have tried it all the time!
Not long ago, I went through a project and needed to develop a module for Waveform Drawing. As we all know, this module is not complicated. Many people only need to spend one morning to complete it. And soon I completed the development and successfully applied it to the system. However, this is nothing. In order to make this module more robust and adapt to future needs, I analyzed it carefully. Later I found that this waveform chart module, the coordinate option, waveform re-query (reproduction), and waveform chart trend record are indispensable. Therefore, I derived three subclasses from the classic model graph class, form a typical module of the waveform chart. This module has also been well applied and verified in the future, saving a lot of unnecessary time.
The standardization and pipeline development model always needs to anticipate the software requirements to meet the broader requirements. Project Summary and module standardization, software reconstruction, and module extraction are the "Preparations" in software development ", therefore, we recommend that you include the data in the development cycle.
4. Establish the company's module library, develop the software development workflow model, and establish training units.
The last topic is the standardization, module abstraction, module reconstruction, and extraction of the above development process. If we have done so. In terms of the company, we must take appropriate measures to accumulate technologies!
With the module, the company must establish a module library and perform classification management, such as the GUI library, control protocol library, and business logic library. If the company sticks to the establishment of a module library for 10 years and calculates the number of average 1000 programmers, the entire library will cover 10 thousand classic sub-module libraries, these modules are the component of the software, and are also the original talents and foundation for software standardization and assembly line operations. They are equivalent to the screws in the production line of the manufacturing industry.
Once the module library is formed, you must establish a software development pipeline job model, which is actually a new software development process suitable for the company. The following procedure;
{Demand Analysis-model design-Architecture Design-module reuse design-detailed design-coding-test-release project Summary, new module reconstruction and extraction-Module Database archiving}
If the module library and pipeline model are built, it is even more important to establish a training mechanism. For new employees, it is more important to let them know the resources that can be used in the project development process than anything else, this avoids useless work.
So far, a simple standardization and flow operation implementation scheme has been completed. Finally, we will introduce the test.
ØTests also require standardization and establish standardization, automation, and stress testing departments.
Many companies do not pay much attention to testing. Even if they have a test, some companies are also doing the same thing. In the standardization and pipeline development model, testing is even more important. In fact, we can all find that in a real project cycle, testing takes 40% of the time of the real cycle, which is understandable, if the time consumption of this part cannot be reduced, the significance of standardization and pipeline implementation will be greatly reduced.
Just like what I described in a previous article. In fact, most of the company's projects are based on industrial applications, industrial Application products usually have their own parameter indicators, such as industrial control products that require EMC testing.
In addition, companies can also develop their own testing standards for common software. For example, API testing must be automated for more than 1000 tests without failure. For many software, stress testing is also required. For example, a high-performance server must pass a 5000 connection and transmit a 7-day stress test at the same time.
In this regard, we suggest most influential companies establish standardization, automation, and stress testing departments in the process of implementing standardization and pipeline operation models, these departments are mainly used to develop standard test plans, procedures and automated test software.
The above are some of my ideas, which may be insufficient. Please comment on them. Finally, most outsourcing software companies in India have successfully implemented this standardized and streamlined development model, and the development scale and efficiency is indeed far higher than that in China.