In human terms, “production” is the creation of objects that people need from scratch, which can be physical or virtual; software is the “object” that is created, and creating software from scratch is “software production”. .
First, a question – is software production a labor-intensive or a brain-intensive labor?
process
Although the details are different, the production process of any item can be abstracted into requirements, design, implementation, inspection and maintenance. Depending on the situation, it can be further simplified into requirements, implementation and maintenance, and on this basis, it can be repeated until The end of the life of the product or manufacturer.
According to different industries, fields, etc., some subdivisions will be added to the above-mentioned links.
Taking the industry and field that I am in that provide software and services based on Web-related technologies as an example, the current mainstream production process in the industry is—
After receiving the demand, it must first analyze it, and demonstrate whether it is a pseudo demand and the integrity and rigor of the concept and logic. If there is no problem, enter the design link, including product design, UI & UX design and software design. Among them, UI & UX design can also be considered as a part of product design.
Unlike stand-alone applications that only have a client, today’s application software basically consists of two parts: the client and the server, namely the front-end and the back-end. Therefore, the design and implementation of the software should consider these two parts at the same time.
Software design mainly includes the structural design of software, that is, software architecture, and technology selection. When designing the structure, it must be forward-looking and flexible, so that it can easily respond to changes in a certain period of time in the future.
It should be noted that software architecture is affected by industry trends and regulations, organizational strategic goals and customer needs, and technology selection is limited by software architecture, team planning, and personnel quality, not the other way around.
Taking this as the dividing line, requirement and design are brain-intensive labor, and the rest of realization, inspection and maintenance are basically labor-intensive labor.
In this whole process, it is necessary to supplement the resources adjustment and process control with administrative management and project management methods to ensure that the products are delivered on time and meet the requirements.
division of labor
Generally speaking, regardless of managers, the division of labor related to software production is based on the production process. The following are the main divisions of labor sorted by the upstream and downstream relationships of the software production process:
- Product Design – Product Manager, Interaction Designer;
- Appearance design – UI designer;
- Software development – software engineer;
- Software testing – test engineer;
- Deployment and maintenance – operation and maintenance engineer.
In different enterprises or departments, according to the actual situation, people in the same position may participate in multiple links. For example, a company or department does not have dedicated test engineers and operation and maintenance engineers, product managers, interaction designers and UI. Designers will also do software testing related work, while software engineers will do some deployment and maintenance work; it may also be subdivided into more positions in a certain link, such as software development, which is subdivided into architects. , front-end engineers, back-end engineers, etc.
So, are jobs spawned by specific tools or scenarios, such as Java engineers, Go engineers, WeChat applet engineers, H5 engineers, etc., considered a division of labor? I don’t think so – these types of jobs are too affected by changes in corporate business, etc., are highly volatile, and disappear anytime, anywhere.
What affects the stability of your position is the ability to solve the problems in your own link, not the tools you are familiar with. Suppose you entered a company as a “Java engineer”, and one day the company decided to replace all Java with Go. Do you voluntarily resign or wait to be fired, or learn Go?
The premise of the division of labor is that the process links are relatively complex, and due to insufficient standardization of operations or other reasons, it cannot be automated, and machines cannot be used to replace labor.
deliver
From the perspective of software delivery methods, there are project-based software and product-based software, which will have an impact on process details and development mentality.
Project-based software is equivalent to a one-time sale. You need to bid first or pull customers through market sales personnel, and then sign a contract after discussing specific needs with customers. After entering the research and development, everyone’s mentality is – try to complete it as soon as possible, as long as it can be used, maintainability, elegance, etc. are all on the side!
When making this kind of software, deadlines force you to focus your firepower from the beginning, just like knowing that you are going to die someday, but you have to do something/something before you die, and do your best and work hard under huge mental pressure. physical strength.
Enterprises or departments that mainly focus on project-based software, if there is a lot of project demand, they will enter the next project before finishing one project, which will start a vicious circle for individuals – the consumption of spiritual and physical resources is greater than Replenishment, with little growth in professional ability – the cycle can only be terminated when at least one of the three conditions is met: not many projects, sufficient time, or sufficient personnel.
Product-based software is relatively more long-term, requiring continuous iteration and improvement. Unlike project-based software, delivery is almost the same as the end.
The needs of this type of software are mainly explored and controlled by product managers. Compared with project-based software, everyone’s mentality is more inclined to make the software well, and they care more about the aesthetics and maintainability of the design at all levels.
From an enterprise perspective, product software is generally an external XaaS online service; but from a departmental perspective, it is an internal mid-office service. In such an enterprise or department, there is no need to mention the professional growth of the individual, and the probability of opening a virtuous circle is greater than that of a project-based software-based enterprise or department.
In contrast, the production of product software is a labor-intensive labor, and the production of project-based software is a labor-intensive labor.
optimization
Why optimize? because–
“Reducing cost and increasing efficiency” is an eternal topic and eternal pursuit of people in the production process.
Unless you can find a way to “leap” like a wormhole, so that the idea is completed as soon as it appears, the limit of optimizing a thing is the minimum amount of information/work required to complete it –
To accomplish one thing requires a fixed amount of information/workload, it depends on where this part of the information/work is done; to do this thing well, you have to achieve this amount of information/workload. More is useless.
Olay’s thoughts
However, this “minimum amount of information/work” can only be a theoretical value, just as the actual distance from one location to another must be greater than the straight-line distance between them – when more than one factor affects one thing There must be more or less “futile effort”.
Optimization is to find a comprehensive optimal solution in time and space for a specific problem in a specific scenario – like an algorithm? It’s the algorithm!
The requirements, design, implementation, inspection and maintenance in the production process are necessary. Even if it seems that some (several) ones are eliminated in some cases, they are not eliminated, but transferred.
For example, the current enterprise or department does not have a design link during production. It is not that the software production does not have the design link, but the design link is done by open source software providers or other upstream suppliers.
There are often many participants in software production, and the resulting overlapping division of labor and distorted information transmission will result in a lot of “useless work”, resulting in a waste of time and space resources.
Looking at it this way, the direction of optimization is clear—reducing overlapping parts of labor divisions, reducing information transmission links, etc.—with the goal of reducing staff in business-oriented production processes and increasing productivity.
I think “taking knowledge as the single source of truth for the whole link” is a way, which will be elaborated in the series of articles on ” Chat about the integration of production and research in the middle and back office ” in the future.
From my short-sighted view, there will be no change in the mainstream division of labor in at least the past five years. But as the low-code development platform matures, the division of labor is bound to change.
Today’s software production is almost still started by an enterprise or department from the most basic unit (ignoring open source tools), and gradually becomes a complete software product. If the low-code development platform is relatively mature, those business-oriented enterprises can completely cut off a large number of personnel originally used to develop and maintain the system after purchasing the low-code development platform, leaving only a few based on the low-code development platform configuration or development satisfaction The function of the business needs can be staffed.
In this case, business-oriented enterprises are like those traditional enterprises. Most of the personnel composition is to solve business problems or maintain the normal operation of the company. Only an IT department composed of a few personnel is responsible for the development and maintenance of system functions, and no High technical ability is required.
In this way, companies that do low-code development platforms become suppliers of business-oriented companies, and those technology-oriented companies that do UI components or other infrastructure are suppliers of companies that do low-code development platforms.
With the maturity and rise of the low-code development platform as an opportunity, the industrial structure and the composition of employees will change. From the industrial level, the production chain from raw materials to saleable finished products has been improved, and the division of labor has been narrowed; From the point of view, there is no change in technology-oriented enterprises, while business-oriented enterprises will shrink or merge in positions, and the division of labor will become thicker.
Summarize
People are the cause of all kinds of problems in human activities. The more people involved, the lower the efficiency and the greater the energy consumption. The labor-intensive labor should be “outsourced” to automation and intelligence as much as possible. tools or machines to solve the problem, as director Lin Chao said in a video –
percentage of working time
While solving one problem, people create problems on the other, and then solve them, and so on. No matter how ideas, methodology and means change, human nature and needs will not change, so the development of human society is spiraling upwards——
History doesn’t repeat itself, but it rhymes.
Mark Twain
Dao, law, technique, and implements are more variable and less important the further you go. Seek the way, change the law, change the technique, change the weapon.
This article is reprinted from: https://ourai.ws/posts/rethink-software-production/
This site is for inclusion only, and the copyright belongs to the original author.