25 Jan, 2021
Cải tiến thực
Sau khi đăng bài “Cải tiến qui trình với CMMI”, tôi nhận được nhiều emails hỏi về “Cải tiến thực” và làm sao họ biết rằng công ti của họ thực sự được cải tiến? Cho nên sau đây là cách nhìn của tôi về “Cải tiến thực”.
Cải tiến thực có thể được đo bằng nhiều thứ như tăng năng suất và chất lượng, hài lòng của khách hàng tốt hơn, ít lỗi hay làm lại việc, và lợi nhuận và thị phần cao hơn. Nếu công ti của bạn có “Cải tiến thực”, bạn sẽ để ý năng suất tăng lên, chính là số lượng cái ra của sản phẩm làm việc tính theo kích cỡ đối với số công nhân đã cho và thời hạn dự án. Chẳng hạn trước bất kì cải tiến này, một tổ mười người có thể viết 10 000 dòng mã một tháng. Sau cải tiến, cùng tổ đó có thể viết 15 000 dòng mã một tháng vậy năng suất của bạn đã tăng lên 50%. Cải tiến thực không phải là cái gì đó trừu tượng mà có thể là điều đơn giản như ít lỗi hơn trong sản phẩm phần mềm. Bạn có thể giảm số lỗi bằng việc dành nhiều thời gian hơn cho pha yêu cầu bằng làm việc chặt chẽ với khách hàng để hiểu nhu cầu của họ; làm tài liệu yêu cầu bằng việc dùng kịch bản use case và thẩm tra lại với người dùng để có yêu cầu chính xác hơn; dựng bản mẫu để làm sáng tỏ thiết kế và KHÔNG vội vàng nhảy vào viết mã. Bạn càng có nhiều phiên kiểm điểm với tổ, bạn càng có ít lỗi hơn. Đến cuối, bạn đạt tới chất lượng sản phẩm tốt hơn.
Vì nhiều dự án thường bỏ lỡ các cột mốc và lịch biểu, bạn có thể cải tiến nó bằng việc có cấu trúc phân việc tốt hơn trong khi chia yêu cầu thành các nhiệm vụ chi tiết nhỏ hơn, đủ nhỏ để bạn có thể lập kế hoạch và theo dõi chúng trên cơ sở hàng tuần. Tôi bao giờ cũng khuyên sinh viên chia các yêu cầu lớn thành các nhiệm vụ nhỏ hơn để họ có thể hoàn thành trong quãng 32 giờ (một người-tuần). Nếu cái gì xảy ra gây ra chậm trễ, sẽ dễ sửa chữa một nhiệm vụ nhỏ hơn là nhiệm vụ lớn. Bạn cũng có thể cải tiến lịch biểu bằng việc có ước lượng tốt hơn (nỗ lực, thời gian, chi phí) và cân xứng tốt hơn giữa kĩ năng và công việc. Đừng chỉ phân công bất kì người phát triển nào cho bất kì nhiệm vụ nào một cách ngẫu nhiên. Lúc bắt đầu của mọi dự án, bạn phải biết kĩ năng và kinh nghiệm của từng người phát triển để cho bạn có thể phân công họ vào nhiệm vụ tương ứng. Điều cũng rất quan trọng là tiến tục cung cấp đào tạo để giữ cho kĩ năng của họ được cập nhật. Để duy trì phần mềm chất lượng cao (tính bảo trì được) bạn nên chia thiết kế thành các mô đun nhỏ hơn để dễ sửa và bảo trì. Bạn phải chắc những mô đun này có nhiều chú thích và tài liệu tốt, đặc biệt làm tài liệu cho bất kì thay đổi nào để sánh đúng với mã.
Có nhiều điều mà bạn có thể đạt tới “Cải tiến thực”. Điều tốt nhất là cải tiến kĩ năng của người phát triển để tuân theo qui trình được xác định tốt cho mọi dự án. Vấn đề số một với phát triển phần mềm hiện thời là người phát triển vội vàng lao vào mã và không dành đủ thời gian trong pha yêu cầu và thiết kế. Vấn đề khác là nhiều người quản lí dự án không được đào tạo tốt. Nhiều người được đề bạt tới chức vụ đó mà không có đào tạo chính thức. Theo ý kiến tôi, đầu tư tốt nhất một công ti có thể làm là đầu tư vào nhân viên riêng của họ bằng việc có đào tạo thêm trên cơ sở đều đặn. Ngày nay, phần lớn các công ti phần mềm đang cạnh tranh trong hai khu vực. Một khu vực về kinh doanh (phát triển sản phẩm và dịch vụ) và một khu vực về tài năng được cần để thực hiện những việc đó. Thành công của công ti trong kinh doanh được xác định bởi thành công của nó trong khu vực tài năng. Có nhân viên có kĩ năng nhất sẽ đem lại sản phẩm và dịch vụ chất lượng cao hơn. Thay vì hội tụ vào cái gì đó “trừu tượng” như trả tiền cho nhà tư vấn để cho bạn “chứng chỉ” nói rằng công ti của bạn là “rất tốt”, bạn có thể hội tụ vào cái gì đó “đơn giản” như nhân viên riêng của bạn. Bởi vì có thiếu hụt trầm trọng người có kĩ năng trên khắp thế giới đồng thời công nghệ đang thay đổi nhanh chóng, bạn phải hội tụ vào phát triển nhân viên riêng của bạn. Vì tri thức được cần để dựng sản phẩm và cung cấp dịch vụ tăng lên cùng công nghệ mới, việc thu nhận và giữ nhân viên có kinh nghiệm trở thành mấu chốt để cải tiến thị phần và lợi nhuận. Người chủ công ti giỏi phải biết rằng năng lực của họ để cạnh tranh trong công nghiệp có liên quan trực tiếp tới năng lực của họ để hấp dẫn, phát triển, thúc đẩy, tổ chức và duy trì người có kĩ năng cao.
Có nhân viên có kĩ năng là quan trọng hơn chỉ là thuê và giữ họ. Bạn phải phát triển họ bằng việc đảm bảo rằng họ có đào tạo tốt nhất để xây dựng kĩ năng mới mà thị trường cần. Ngày nay phần lớn các đại học đều có chương trình đào tạo tương tự cho nên phần lớn các sinh viên tốt nghiệp có kĩ năng tương tự. Điều tuỳ thuộc ở đào tạo của công ti là tạo ra khác biệt. Chương trình đào tạo tốt có thể phát triển sinh viên mới tốt nghiệp trung bình thành nhân viên có kĩ năng cao. Trong thị trường cạnh tranh cao này, nhiều công ti đang xô vào làm nhiều điều khác nhau, nhảy từ ý tưởng “trừu tượng” này sang ý tưởng “phức tạp” khác mà không biết rằng cải tiến thực là cái gì đó đơn giản và theo nghĩa thông thường.
—-English version—-
“Real Improvement”
After posting the article “Process Improvement with CMMI”. I received several emails inquiring about “Real improvement” and how do they know that their companies are really improved? So following are my view on “Real improvement”.
A real improvement can be measured by many things such as increase productivity and quality, better customers’ satisfaction, less defects or reworks, and higher profits and market share. If your company is having “Real improvement”, You will notice an increase productivity, which is the number of work-product output in size for a given numbers of worker and project duration. For example before any improvement, a team of ten people can write 10,000 lines of code a month. After improvement, the same team can write 15,000 lines of code a month so your productivity has increased 50%. A real improvement is not something abstract but can be a simple thing such as less defects in software products. You can reduce numbers of defect by spending more time during requirements phase by working closely with users to understand their needs; Document requirements using use case scenarios and verify with users for more accurate requirements; Build prototypes to clarify design and NOT hurry to jump to code. The more reviews you have with the team, the lesser defects you get. In the end, you achieve better product quality.
Since many projects are often missing milestones and schedules, you can improve it by have better Work Breakdown Structure in breaking requirements into smaller detailed tasks. Small enough so that you can plan and track them on a weekly basis. I always recommend students to break down larger requirements into smaller tasks that they can complete in about 32 hours (One man-week). If anything happen that cause a delay, it is easier to correct a small task than a larger tasks. You can also improve the schedule by having better estimates (Efforts, time, costs) and better matching of skills to the work. Do not just assign any developer to any task randomly. At the beginning of every project, you must know the skills and experiences of each developer so you can assign them their tasks accordingly. It is also very important to continue providing trainings to keep their skills up-to-date. To maintain a high quality software (Maintainability) you should breakdown the design into smaller modules for easy of fixing and maintenance. You must make sure these modules have lots of comment and good documentation, especially document any changes to match the code.
There are many things that you can achieve “Real improvement”. The best is to improve the skills of developers to follow a well-defined process for every projects. The number one issue with current software development is developers are hurrying into coding and do not spend enough time in requirements and design phases. Another issue is many project managers are not well trained. Many get promoted to that position with no formal training. In my opinion, the best investment a company could do is to invest in their own employees by having additional trainings on a regular basis. Today, most software companies are competing in two areas. One for the business (Develop products and services) and one for the talent required to implement them. A company’s success in its business is determined by its success in the talent area. Having the most skilled employees, will bring higher quality products and services. Instead of focus on something “abstract” such as paying to have consultant give you a “certificate” saying that your company is “very good”, you can focus on something “Simple” such as your own employees. Because there is a critical shortage of skilled people all over the world at the same time technology is changing quickly, you must focus on developing your own employees. As the knowledge required to build products and provide services increases with new technology, the acquiring and retention of experienced employees becomes critical to improving market share and profits. A good company owner should know that their ability to compete in the industry is directly related to their ability to attract, develop, motivate, organize and retain highly skilled people.
Having skilled employees is more than just hiring and keeping them. You must develop them by ensure that they have the best training to build new skills that the market needs. Today most universities have similar training programs so most graduates have similar skills. It is up to the company training that make the different. A good training program can develop an average graduate into a highly skilled employees. In this highly competitive market, many companies are rushing to do so many different things, jumping from one “Abstract” to another “Complex” ideas without knowing that real improvement is something simple and common sense.