Programmers are confused not only because they feel powerless in the face of complicated technology, but more importantly because they have been buried in the vast division of labor system in the software world for a long time, unable to see the value chain from business to software architecture, unable to clearly locate their position in the division of labor system, and unable to deal with the relationship between themselves and technology and business.

A lot of programmers really don’t like business. I’ve been there. I’d rather work on frameworks, tools, and technical components. A friend of mine used to tease me by saying, “You work overtime every day to write so much code, and then what? Has anything changed? I’ve written a lot of rubbish.” When you think about it carefully, most of the time, the business in our mind is only the logic and process, we lose the business scenario, the user pain point experience, thinking about the business development. These are the parts that are closely related to value. It’s natural for us to cover up strategic laziness with tactical diligence! The result, then, is that we confine ourselves to the assembly line, emastising our ability to see the value of our business and focusing too much on the value of new technologies to competitiveness in the workplace. This is the root cause of technology learning anxiety in the face of technology complexity.

So what is business?

Refers to some kind of purposefully work or work project, the purpose of business is to solve the human society and food, food, housing and transportation are closely related to the field of the problem, including material needs and spiritual needs, so that the main body and the audience to carry out business activities can get benefits. Generally speaking, business is the pain point of users and the profit point of business providers (such as companies). And technology is the tool and means to solve the problem. For example, in order to solve the business problem of users shopping at any time, programmers use Web technology to build e-commerce App, and when the demand is upgraded to help users quickly choose goods, programmers will use data algorithm and other technical means to build a recommendation engine. If the technology is separated from the business, then the technology application can not be well implemented, and the technology research will lose the scene and direction. Without technology, business becomes extremely expensive and inefficient. So if we go back and think about the software system that we’re building with the code that we’re writing day and night, what’s the value of that? It’s about solving a business problem, so when you’re working on something that doesn’t contribute much to solving a business problem, you need to make adjustments. So how does a software system embody its own value? In my opinion, it is reflected in the following aspects:

Business areas and functions: For example, alipay launched transfer and collection functions based on the payment field, such as artificial intelligence automatic driving system, etc.

Service capability: This is like the train station ticket window, the criterion of its service capability is how many users can concurrently deal with the ticket business, can complete the ticket business within a specified time, can work 7*8 hours continuously. Corresponding to the field of software system, it shows the following three aspects:

  • System correctness (program can correctly express business process, without bugs)
  • Availability (can work 7 * 24 * 365 non-stop)
  • Large scale (high concurrency, high throughput)

It is with the help of large-scale software systems carrying a variety of business functions that Internet companies have huge service capabilities and with the help of Internet technology to break through space restrictions, solve business problems efficiently and cheaply, and create huge profits, which is incomparable to human beings.

By understanding this level of concept, you can understand the value chain: companies create value by providing business services through software systems, and programmers create value by building and continuously evolving software system service capabilities and business functions to support the business development of the company.

With this value chain, we can reflect on how much our work and study have promoted the service capability of the software system. You can reflect on whether your work learning is actually solving business problems in your field or just doing repetitive work that doesn’t make much sense.

What is architecture?

In my view, software architecture is the activity of organizing people, technology, and other resources to solve business problems and support business growth. Perhaps abstractly, I think we can understand what this means in terms of the specific tasks of the architect:

Organizational business: Architects build their own “world view” of the business by exploring and researching knowledge of the business domain. Based on this understanding, he will split the business life cycle, establish business boundaries, build a set of domain models to solve specific business problems, and confirm the relationship and collaboration between models and domains, and complete the organization of the elements in the business domain.

Organizational techniques: In order to operate the business model of human society in the computer world, the architect needs to choose the appropriate framework, middleware, programming languages, network protocols and other technical tools in the computer world and organize them into a software system based on the previous design plan. In my view, the software system is like a technical organization. That is, the technical components and tools are organized according to some logic, and the technical tools are defined, defined, and grouped together to achieve business functions. For example, the RPC framework or message queue is used as a communication service between internal systems as a messenger, while the database is responsible for recording the results, which is more like a clerk.

Organizing personnel: In order to be able to achieve the goal of the use of software systems to solve business problems, architects also need to pay attention to the process of the construction of the software system, he in order to realize the software system for the call, from the company organization gathered a batch of software engineering division, and personnel according to the different type of work, responsibility, system organization, the collaboration among these is determined, It also pays attention to whether the organizational system works well, such as whether the communication is smooth, whether the output is met, and whether it is completed on time.

Organization overall, output: The architect’s primary goal is to solve business problems and drive business growth. So he was very concerned about the health of the software. Only after the software system is running can the external services be provided and the business problems can be solved in the process of user access. The architect needs to pay attention to the data generated during the operation, such as the business success rate, system operation resource usage data, user feedback, business growth, and so on. This information will help the architect to determine the next architectural goals and direction. So software architecture is not just about which framework to choose and which technical components to choose. It runs through the organization of people, the organization of technology, and the organization of business, and organically combines these three kinds of organizations to solve business problems. Many interviewees, when asked about the architecture of the system they are developing, will only list technical elements such as technical components, technical frameworks and so on, without clarifying the underlying meaning of architecture at all. There are some architects focus solely on the study of the underlying technology and thought to build an excellent system is very cow force, but he ignores the value of the software system is the ability to solve business problems, support business growth ability to measure, so finally produced a lot of the organization, has no help for the business system.

Costs and Benefits

As mentioned before, software system can only create value when it is running, that is to say, whether the software system can work steadily 7*24 * 365 days is related to the company’s revenue level. So the development team is always careful to release the production environment and work overtime to solve the production environment problems. The cost of the software system is reflected in the software construction process. At this time, we can understand the value of engineering techniques such as project management, agile development, unit testing, continuous integration, continuous construction, version management, etc., some of them are to ensure the correctness of the software system, some are to reduce the communication cost. Some are to improve development efficiency, but in general, it is to reduce the cost of software construction. Therefore, while improving system service capability and creating more business revenue, reducing construction cost is also an effective means to improve revenue.

As a software engineer, we are often in a certain part of the software construction process system. We can think about the value of each skill based on the relationship between cost and benefit, learn new valuable skills, and even select appropriate technologies based on the consideration of cost and benefit in our work. For example, there is no need to do too much design and waste time by applying various fancy design patterns in places where logic does not change much. So that we can become masters of technology.

The architecture goals need to adapt to the evolution of the business

The goal of architecture is to support business growth, to improve the service capability of software systems. But that said, but the truth is there are many trade-offs. For example, for the start-up team, whether its product solves the business problem the assumption has not been confirmed, immediately to build a high performance, high availability of distributed system, such architecture goals far beyond the needs of business development, the final result is a lot of waste of manpower and material resources, but no improvement. The architect needs to carefully weigh the relationship between correctness, scale, and availability. For example, the business is booming this year with orders of 3 million per day, and based on the possible forecast for the future, there may be 30 million orders next year. The architect should focus on scale and availability. And the degree to which each point of improvement is measured by the architect, such as whether two nines or three nines are available. Looking back at my previous work, I wasted a lot of resources of the organization because I did not set the architecture goal. For example, in my previous entrepreneurial team, due to my certain code cleanliness, I often spent a lot of time to worry about the code quality with colleagues, so that the functions that could have been put on line faster were delayed. The rush to be right at the time was not matched by the entrepreneurial team’s business need to test ideas quickly.

Value oriented – looking for new ways to learn and work

Lean in and take responsibility for greater value: Don’t stop focusing on software operations just because you’re a developer, and don’t stop focusing on software development just because you’re testing, because the more you focus the more you see the bigger picture. If you only focus on one acre of land, then doomed to this life can only be stuck in this acre of land, become an assembly line anxiety to death code farmers. Try to shift your thinking and think about value from an architect’s point of view, and see if you can extend technology to the business, to the user, and ultimately to value. Before my friend said that the right way to do things is to put the product manager in the operations position and the programmer in the product manager position. Lean in to know what to do better. Think like an architect, find focus with value: people are confused because they can’t find focus, and the meaning of value is to guide us to think about what to do to achieve value, what to do first will be more profitable than what to do later. Think globally like an architect, break down the problems encountered, connect the things learned, and strive to form a complete value chain.

! []( W =750&h=1334&f= JPEG&s =84289) []( w=750&h=1334&f=jpeg&s=76616)