A system perspective

From early 20th century, manufacturing processes based on “assembly line” created by Henry Ford has become the standard. The idea is breaking down complex processes into the smallest and simplest tasks so workers can be trained to do is more efficiency and effective. This task segmentation was essential at that time due to the limitations of the skills of labor workers and the efficiency needed of the car industry. Henry Ford said: “The only way for a groups of workers to work in complex processes such as building a car is to give each of them only one thing to do and let them focus on doing that as efficiently and quickly as possible.”

This method also manifests itself into the way people organize things into functions and specialization. It works very well throughout the 20th century, especially in manufacturing sectors with manual labor workers. However, it does not work well in technology area with knowledge workers of the 21st century. Today, most works requires intensive knowledge, especially technology works. That is why there is a big gap between skilled workers and unskilled workers. Unfortunately many IT companies are still operating like when they are still in the 20th century. They divide works into functional groups, each only know one things based on technologies and platforms. For example, networks, servers, databases, desk top, and applications. Very few people know how the entire system works and how it impacts the business. In software development, workers are divided into many functions, each specializes in one such as planning, designing, coding, or testing but few know how the entire software work. That is why many projects failed during integration.

The problem with task segmentation is that by breaking down the complex processes into individual tasks the overall perspective is lost. Workers only know their own jobs, their own functions. Anything outside them is not their concerns. The root cause can be traced to the education system. Academia professors look at software and consider programming and testing as the main activities then focus program training on these two skills only. For years, graduates from these programs only know one thing well but lose sight of the entire system.

First year student often asked me: “Why do we have to study so many things in software engineering where all I need is to write code to get a job in the industry? I told them: “You are trained to be an software engineer, not a programmer. An engineer build the system, a programmer only build one component of the system. Your career cover the entire software development and much more. Programmers career is limited to coding and testing. You could expand your knowledge broader and deeper and there is no limit to what you can do. Programmer cannot do that and today, there is no reason to pay high wages for someone just to code since you can outsource coding to lower cost countries. No company outsource software engineer, only programmer. You want to see the entire forest, not just a tree. You want to know how the system works and support the business, not how one component functions. Do not limit yourself to one thing, expand your horizon then you can go as far as your potential allows.”

I often tell students a story about the best programmer in the world. No one can write code better than him. He can write thousand lines of code a day. He knows that there is a system where his software operates but he does not understand it well. It would never occur to him to ask users of what they need since he never talk to users. He has no idea about other functions and other people who also work on the system. He has no idea how the entire system works. He has no concept of configuration management or change management. He only know one thing: “Write code”.

In the project, he receives requirements from his manager and within few days, he finishes it. On the next day, his manager says that customers have changed their minds so there is new requirements. He does not mind of fixing his code so he adds few thousand lines of code. Few days later, the manager says that customer wants to add more functions so he starts write few more thousand lines of code again. Few weeks later, the customers change their minds and want to start with a newer and better requirements. He has to throw away what he did and starts everything new. He writes few more thousand lines of code. The customers change their minds again so he has to rewrite the code again. He has to do it at least twenty five times more in just few month. He knows that he probably write over fifty thousand lines of code and he is really confused and tired about all changes. At last, the project complete but when he delivers the software, customers complains: “That is not what I want, please do it again”. Finally, the best programmer quits his job and goes back to school, this time he understands what he really need, he wants to study software engineering.”

Today, software developers do not work alone. They always work in team because the software is getting larger and more complex. What developer needs are the knowledge of the entire system, and relationship of all major components and how they all work together to support the goal of the business. They must understand the entire software process, not a piece of it. They must know how to work with customers to identify their needs and to come up with better requirements. They must know how to architect a system by identify all components as well as user interfaces, quality attributes. They must know how to design each components by conducting trade-off and set priorities to reduce the risks. They must know how to implement these components and make sure that they all work well together. They must know how to conduct tests to verify that everything work as designed and meet customers requirement. They must know how to support the customers when the system is fully functioning and running. Basically, they must know everything.

Today, software workers need a comprehensive training and education. That is why a good college education is so critical. That is why selecting a good school with good training program is so important. Every students must make the “right decision” because your future depends on it. A good teacher can only open the door of knowledge for you but you must enter it. A good training program can show you a roadmap to your destination but you must travel the road by yourself. In this fast changing world, things can come and goes quickly. Fortune can change faster than the weather but knowledge and skills are the only thing you have and no one can take it away.

Sources

  • Blogs of Prof. John Vu, Carnegie Mellon University