Category: software development

  • Học chậm #1

    Tóm tắt: Agile, Scrum, software, dystopia, working mom, language learning

    1. Agile & Scrum?

    Hỏi: Agile và Scrum giải quyết vấn đề gì?

    Đáp: Agile ra đời để tăng tính linh hoạt trong phát triển phần mềm, giúp phản hồi nhanh với thay đổi và cung cấp giá trị sớm hơn so với Waterfall. Scrum cụ thể hóa Agile bằng cách tổ chức công việc theo các chu kỳ ngắn (Sprint), tạo sự minh bạch và cải thiện hợp tác nhóm. Cả hai đều giúp giảm rủi ro và tối ưu hóa kết quả trong môi trường không ngừng thay đổi.

    Từ vựng mở rộng:

    • Software Development Life Cycle:
      • Khái niệm SDLC hình thành vào thập niên 1960-70 nhằm giải quyết sự phức tạp ngày càng tăng trong phát triển phần mềm, đặc biệt sau khủng hoảng phần mềm. Nó cung cấp một khung lý thuyết với các giai đoạn rõ ràng như yêu cầu, thiết kế, phát triển và bảo trì để đảm bảo chất lượng và quản lý chi phí. Mô hình Waterfall là một trong những cách triển khai đầu tiên của SDLC.
    • Waterfall (được Winston W. Royce trình bày năm 1970) là một trong những mô hình SDLC đầu tiên, nhấn mạnh quy trình phát triển theo từng bước rõ ràng.
    • Software crisis (1960s)
      • Thuật ngữ này được đặt ra vào cuối thập niên 1960, khi các dự án phần mềm liên tục thất bại do không đáp ứng được tiến độ, ngân sách hoặc chất lượng mong đợi.
      • Trước 1960, phần mềm tồn tại nhưng không được xem là một sản phẩm có “vòng đời” cần quản lý chặt chẽ. Phần mềm lúc đó chủ yếu phục vụ mục đích cụ thể, nhỏ lẻ, và không có sự phân biệt rõ ràng giữa phát triển, thử nghiệm, và bảo trì. Chính sự gia tăng về quy mô và chi phí của phần mềm vào thập niên 1960-70 đã dẫn đến nhu cầu quản lý vòng đời phát triển phần mềm, đặt nền móng cho SDLC và các phương pháp phát triển hiện đại như Agile và Scrum.

    Nguồn ảnh: https://www.geeksforgeeks.org/software-engineering-software-crisis/

    PMBOK Handy Guide: https://www.eyapro.com/project-management/pmbok-7th-handy-guide

    2. Career and Family

    Tuần này Giang đã dịch xong chương 1 của cuốn Career and Family. Thú vị nhưng hơi nặng nề. Giang sẽ trích dẫn vào tuần sau nhe.

    3. Danh sách từ vựng “đầu tiên” khi học bất kì một ngôn ngữ mới?

    Gần đây Giang đang quay lại việc học ngoại ngữ (tiếng Nhật và tiếng Đức). Câu hỏi Giang đặt ra là, liệu có chăng một danh sách các từ thông dụng phổ biến ở hầu hết các ngôn ngữ, để người học có thể bắt đầu? Sau đây là các danh sách mà Giang tìm được:

    • First 625 Words (Gabriel Wyner): 625 từ, tập trung vào những từ cụ thể, dễ hình dung, phù hợp cho người mới bắt đầu, có 2 phiên bản xếp theo alphabet hoặc theo chủ đề; nhưng thiếu cơ sở khoa học, không phản ánh tần suất sử dụng thực tế.
    • Swadesh List: gồm 100 hoặc 207 từ, phù hợp để so sánh ngôn ngữ học lịch sử, nhưng không thực tế cho giao tiếp hàng ngày.
    • New General Service List (NGSL): 2818 từ hiện đại trong tiếng Anh
    • Academic Word List (AWL): 570 word families, tập trung vào ngữ cảnh học thuật, không phù hợp để giao tiếp cơ bản.
    • COCA Frequency List: Phản ánh ngôn ngữ hiện đại, dựa trên corpus lớn, và (vẫn) chỉ áp dụng cho tiếng Anh Mỹ.

    Với nhu cầu của bản thân, Giang sẽ bắt đầu với First 625 words để có cảm hứng, đọc hiểu được một số meme và truyện tranh, kế đó Giang sẽ chuyển qua NGSL để giao tiếp cơ bản, và sau đó là AWL để có thể đọc sách non-fiction và xem phim tài liệu. Nhân đây Giang cũng mới kiếm ra cái tool này thể hiện mối liên hệ giữa các từ như một cái map, mời bạn coi chơi: https://wordmapdictionary.com/

    Tuần này Giang đã coi và đọc:

    Phim:

    1. When the phone rings: 4.5 sao, chủ đề tưởng tổng tài 3 xu mất não nhưng mà càng coi càng thấy biên kịch làm tốt phần xây dựng nhân vật và truyền tải nhiều thông điệp hữu ích
    2. Upstream: 5 sao, vừa coi vừa rớt nước mắt, chủ đề nặng nề và thực tế

    Sách (chưa đọc xong cuốn nào hết trơn…)

    1. Từ xác định đến bất định
    2. Lịch sử vú
    3. Lịch sử vợ
    4. Về bản tính người

    Sách chờ đọc:

    1. Big Fat Notebook: Computer Science and Coding
    2. Origami Việt Nam chuyện của giấy: mua vì nhớ ông anh Hai của mình quá xá https://origami.vn/

    Một tuần mới lại đến. Chúc tụi mình nhiều nhiều sức khỏe nha

    Giang Nguyen, 2025.01.05

  • #3 Make it work first, then make it better

    Hôm qua, sau nhiều ngày trì hoãn, mình đã bắt đầu code những dòng đầu tiên.

    Xu hướng của mình là, trước khi bắt tay vào việc gì đó, mình sẽ đọc lý thuyết, documentation, xem giới thiệu, đi học… rồi mới làm. Nói chung là tập vùng vẫy trên cạn chán chê rồi mới xuống nước tập bơi đó. Nhưng cái nào thì nó work chứ học code nó không work với mình theo cách này. Mình sợ, nên mình cứ trì hoãn mãi.

    Cho đến một hôm, mình đi học vẽ. Vẽ trên máy, khó lắm. Mình chẳng quen dùng layer, chọn màu, chọn cọ, nét thanh nét đậm… Cô giáo thì liên tục sửa trục, sửa khối, mình càng quíu. Bài vẽ toàn nét phác khối mà chẳng vẽ thêm được chi tiết. Bài tập cứ nợ hoài, hoặc làm chẳng xong. Xong mình nghĩ, có vẻ không ổn rồi. Vẽ để cho vui mà đến cả việc vẽ xuống còn không làm được thì làm ăn gì?

    Mình ngồi xuống suy nghĩ. Để vẽ được thôi mà, có cần phải vẽ từ đầu trên máy không? Nếu vẽ trên giấy rồi đồ lại thì sao? Mình thấy anh họa sĩ mà mình biết còn làm vậy mà, ảnh có hẳn một quyển vở ô li rất bình thường chỉ để vẽ phác nội dung truyện.

    Thế nên, mình quyết định vẽ chì, rồi chụp ảnh scan lại.

    Nó work! Ít nhất thì có một bài tập đã xong và mình thấy cũng khá cưng!

    Mình bớt sợ hơn, bắt đầu làm tới, chỗ nào không kịp về thao tác là pause lại hỏi cô liền. Cô ơi sao em copy paste không được, cô ơi cô dùng cọ gì ấy, cô ơi và cô ơi…

    Hồi nhỏ mình là bé ngoan, đi học không bao giờ nói leo, hỏi cô mấy câu cắc cớ. Hên là hồi đó không khó lắm nên vẫn học được. Nhưng mà giờ thì mình xác định mình là học trò cá biệt rồi, hỏi tới chứ! Bỏ tiền đi học mà không biết không dám hỏi thì học làm gì.

    Quay lại với chuyện học code.

    Sau khi trì hoãn chán chê, mình nghĩ thôi không ổn rồi. Cách tiếp cận từ lý thuyết, syntax này mình chả có hứng gì hết.

    Mình đăng kí làm freelancer cho chỗ học cũ, phải làm một cái sample. Mình nghĩ mình không được chọn đâu, vì ngoài cái kiến thức nền ra mình chẳng có gì hết. Nhưng mình cứ đăng kí, và làm. Mình cần động lực để làm, có vậy thôi à.

    Mình cũng không chọn tool học hồi đó, mình chơi hẳn Python và thư viện Pandas. Dashboard thì thay vì dùng Power BI, mình vọc trên Google Data Studio. Visualize Data thì mình dùng seaborn với matplotlib.

    Cũng không phải là tự làm đâu, mình chọn một tập dữ liệu khá nổi tiếng và quen thuộc, mở Kaggle và Github lên tìm những bài phân tích của người ta, đọc và copy code vào VS Code, chạy thử. Mình mô tả ý tưởng của họ, và ghi lại những điều cần học, ví dụ:

    • Vẽ nhiều chart một lúc thì làm như thế nào?
    • Các cách manipulate dataset

    Cho đến hôm qua mình đã biết:

    • import các thư viện phổ biến
    • làm phân tích mô tả (EDA): size, datatype…
    • vẽ được chart boxplot cho tầm 10 biến một lúc

    Nghe thì thiệt là đơn giản, nhưng mà mình đã cố gắng lắm đó.

    Trái bóng đã lăn rồi, giờ mình lăn tiếp đây. Hôm nay mình sẽ học vẽ các loại chart khác 😀

    Câu chuyện về sự trì hoãn của mình tạm dừng ở đây nhen.

    20220823

  • Ước lượng Story Point trong Scrum: Liệu còn hữu dụng?

    Blog, Development | Apr 26, 2018
    PHẦN MỘT
    Chúng ta hẳn còn nhớ lần đầu đọc Tuyên ngôn Agile (The Agile Manifesto). Nó đem đến cảm giác cực kì phấn khích. Những giá trị của nó thúc đẩy và gia tăng sức mạnh của đội nhóm. Nó tạo ra giá trị sâu sắc hơn cho khách hàng và đẩy lùi những chuyện vớ vẩn khỏi công việc phát triển phần mềm. Mọi thứ đã đâu vào đấy.
    Tua nhanh đến năm 2018, và “Houston, có biến”.
    Scrum hữu dụng, và mọi thứ vẫn đâu vào đấy, nhưng… việc áp dụng Agile và Scrum một cách nhanh chóng đã tạo ra một cơn ác mộng cho những người lên kế hoạch ở cấp độ tổ chức (enterprise-level planners) – những người chịu trách nhiệm cho việc ước lượng Epic/Portfolio. Lĩnh vực này đã lấy một thông lệ được tạo ra cho những nhóm nhỏ làm việc mật thiết với nhau một cách đồng bộ – sau đó cải tiến để áp dụng cho số đông.
    Một nhóm Scrum trở thành vài nhóm hay hàng chục nhóm, mỗi nhóm có một cách hiểu khác nhau về “thế nào là một Story Point”. Hiện nay, không hề có nhóm nào có cùng trải nghiệm, cơ sở hạ tầng hay các bộ kĩ năng giống với nhóm nào; do đó, không hề có nhóm nào định nghĩa Story Point giống nhóm nào.
    Rồi đột nhiên, các quản lý cấp cao cố gắng chia Epic backlog dựa trên hơn 25 diễn giải khác nhau về một Story Point. Càng nhiều nhóm đang làm trên một sản phẩm, ngọn núi phải leo càng lớn [Xin thứ lỗi cho sự châm biếm này]
    17 anh chàng ở Snowbird (17 người tham gia cuộc họp ở Snowbird, từ đó đi đến Tuyên ngôn Agile năm 2001 – ND) sẽ nói gì?
    Scrum cơ bản sẽ nói rằng đừng cố thử ước lượng một Epic backlog, vì việc đó chỉ phí công và đầy chỗ không chính xác. Các chi tiết chắc chắn sẽ thay đổi, và mọi thứ sẽ lại được sắp xếp lại thứ tự ưu tiên vào phút cuối. Nhưng nói điều đó với Epic/Portfolio Manager đang phải đảm đương việc đưa ra một lịch trình tiến độ để cấp vốn, hẳn bạn sẽ nhận được ánh mắt hình viên đạn!
    Ước lượng Epic bị lệch từ số ngày của các nhóm Scrum đơn lẻ khi việc ước lượng vốn vô cùng đơn giản. Các dependency, bộ kĩ năng sẵn có, các công cụ để hoàn thiện công việc được lặp đi lặp lại. Các thành viên riêng lẻ biết về năng lực và giới hạn của từng người. Khi ai đó nói rằng một story là 5 point, mọi người trong team biết chính xác điều người đó ngụ ý là gì. Khi Scrum mở rộng (grew legs), ý nghĩa của “5 points” dần trở nên mơ hồ. Càng thêm nhiều nhóm, càng khó cho các nhà quản lý để diễn giải Story Point. Ở khoảng 10 hay 20 nhóm Scrum… thì tất cả hoàn toàn là một đống hỗn độn! Nếu không có một đường trung đạo (center line) cho việc ước lượng, cả nhóm sẽ trở nên bất ổn rất nhanh.
    Điều này làm dấy lên câu hỏi: “Liệu Story Point có còn là cách hiệu quả để ước lượng các Epic trong Scrum?”
    Một số người cho là có, bạn vẫn có thể dùng Story Point với framework mở rộng (scaling framework) đúng đắn. Một số khác cho là Scrum đã đi quá xa so với những nguyên lý Agile vì công việc không thể chia nhỏ. Khi quy mô của Scrum tăng lên, làm thế nào để các nhóm có thể thiết lập một tiêu chuẩn thống nhất cho việc ước lượng Epic backlog để những nhà quản lý cấp cao, những bên liên quan và những nhóm khác có thể đồng ý với nhau?
    ƯU ĐIỂM VÀ NHƯỢC ĐIỂM CỦA STORY POINTS
    Chúng tôi đã có vài cuộc thảo luận nội bộ và đi đến những ưu điểm và nhược điểm của việc sử dụng Story Point đối với việc ước lượng trong Scrum ở cấp cao. Hãy đọc qua danh sách dưới đây và cho chúng tôi biết ý kiến của bạn về chủ đề này, về những điều bạn chưa đồng ý và những chỗ chúng tôi còn thiếu sót nhé.
    Ưu điểm: Story Points giúp chia nhỏ những backlog lớn.
    Story Points có thể rất hữu dụng với vai trò là một phần của một scaling framework như SAFe và NEXUS. Những framework này cung cấp những phương pháp ước lượng có khả năng mở rộng (scalable estimation techniques) để chia nhỏ công việc ở các cấp độ Epic, Program và Portfolio:
    · SAFe xem xét bức tranh lớn về cách công việc đi từ quản lý sản phẩm (Product Management) đến quản trị sản phẩm (Governance), các nhóm Program và các nhóm Dev, rồi đến khách hàng.
    · NEXUS thiên về cách tiếp cận từ dưới lên, tập trung vào việc việc hợp nhất nhiều nhóm Scrum làm việc trên cùng một sản phẩm. Thông qua sự minh bạch, NEXUS cố gắng bảo vệ và tăng cường những kết nối giữa các nhóm và giữ cho việc thay đổi đồng bộ nhất có thể.
    Từ góc độ chiến thuật, một phương pháp được các nhà huấn luyện khuyên dùng là để cho nhóm đang làm công việc ước lượng đảm đương các cuộc họp về ước lượng (meeting the estimate). Cùng một nhóm đó luôn làm trên cùng một module nên ý nghĩa của các Story Point được duy trì rõ ràng và thống nhất từ Sprint này sang Sprint khác. Nhược điểm là năng lực cho mỗi module (capacity per module) trong mỗi lần phát hành (release) bị cố định, vì các nhóm không thể [đồng thời] nhảy từ module này sang module khác (across the modules). Bạn bị bó buộc trong lượng công việc có thể được hoàn thành trong một lần release cho mỗi module.
    Một cách tiếp cận khác là chỉ định một hoặc hai đại diện từ mỗi Scrum để tham gia một buổi họp ước lượng chính thức. Những người đại diện này có thể đưa ra quyết định về các story size mà không cần bắt cả nhóm phải ngừng công việc của mình. Phương pháp này giả định rằng mỗi người đại diện đều có kiến thức về cách nhóm của họ định nghĩa một Story Point, để họ có thể chia sẻ, thảo luận và tìm ra những lý do chung để ước lượng các story. Nhược điểm ở đây là mỗi nhóm Scrum phải tin và làm theo bất cứ điều gì mà những người đại diện mà họ đã chọn đặt ra về ước lượng cho mỗi story. Đồng thời, rủi ro có thể xảy ra là những người đại diện bị ảnh hưởng từ những cách tiếp cận về ước lượng của các đại diện từ những nhóm khác.
    Nhược điểm: Đây không phải là Scrum!
    Những chuyên gia về Agile sẽ cho rằng các phương pháp này không đại diện cho Scrum. Nếu cùng một nhóm luôn làm trên cùng một module, liệu điều này có đe dọa khả năng mở rộng không? Khái niệm về các nhóm tự quản lý thì sao? Từ quan điểm năng lực, việc giới hạn một nhóm thành một module không thúc đẩy khả năng mở rộng. Điều này không còn là agile mở rộng (scaled agile) nữa. Từ góc độ của nhóm, nếu chỉ có một sự ước lượng mang tính đại diện xa rời với cả nhóm, tính ổn định của nhóm sẽ gặp rủi ro vì (1) người đại diện không có kiến thức đúng về vấn đề dependency hay integration cụ thể hoặc (2) người đó có thể trở nên chịu ảnh hưởng từ những kinh nghiệm của một nhóm khác không phù hợp với cách thức hoạt động của nhóm mình. Trong cả hai trường hợp, người ta lo sợ rằng mọi thứ đang trở nên đi từ trên xuống (top-down) quá mức, tạo ra những cách biệt về tốc độ (Velocity gap) và một đống hỗn độn ngu ngốc trong PMO.
    PHẦN HAI:
    Trong phần dưới đây, chúng ta sẽ đi qua những ưu điểm và nhược điểm của các story point để thiết lập một cơ sở (baseline) thiết yếu nhằm huy động ngân sách, và liệu chúng có đang bao hàm nhiều hơn so với thứ mà Scrum dự định cho chúng không.
    Ưu điểm: Story Points thiết lập một baseline thiết yếu để huy động ngân sách
    Story Points đem đến cho nhà quản lý một điểm tham chiếu dữ liệu cơ sở để ước lượng và tính toán tốc độ (Velocity) giữa nhiều nhóm với nhau, vốn là điều mà ai cũng biết là chuyện ác thiết yếu nếu cần gọi vốn cho bất kì dự án lớn nào.
    Trong waterfall, các nhà quản lý có thể nói chuyện với các bên liên quan trên phương diện những con số (giờ, ngày, tuần, tháng). Ai cũng có thể hiểu những con số. Chẳng có gì tốn ít hơn một giờ. Khi Internet và Agile xuất hiện, không còn dùng giờ được nữa vì nhiều task có thể được hoàn thành còn nhanh hơn cả thời gian dự định họp để lên kế hoạch cho nó! Mặt khác, một số story có những Timeline và Dependency cần cung cấp tài liệu cho những bên liên quan. Story Point cung cấp cho các nhà quản lý một ý tưởng cơ bản về chỗ mà một story đổ vào spectrum, liên quan đến kinh nghiệm trước đó của một nhóm và cách họ đóng gói nó.
    CTO của chúng tôi, Kaushal Amin so sánh việc ước lượng Epic với việc hỏi xem cần bao nhiêu cái thùng (công sức – Effort) để chuyển đồ:
    Công ty A nói rằng họ sẽ chuyển hết đồ với 150 thùng. Công ty B có thể chuyển hết với 100 thùng. Nhìn qua thì có vẻ công ty B năng suất hơn, nhưng nếu công ty B dùng những cái thùng lớn hơn thì sao? Công sức cần bỏ ra có thể y như nhau, chỉ là các công ty đó ước lượng “kích thước thùng” (bucket size) khác nhau mà thôi.
    Ở cấp độ Program, bạn không thể ép buộc cùng một “kích thước thùng” (bucket size) giữa các nhóm. Tuy nhiên, Story Point có thể giúp các nhóm chia nhỏ công việc đến từng đơn vị chức năng nhỏ nhất để theo thời gian, những người lập kế hoạch cấp cao có thể nghiên cứu và hiểu từng nhóm đang dùng bucket size nào để ước lượng.
    Nhược điểm: Story Point [đang] bao hàm nhiều ý nghĩa hơn so với vai trò mà Scrum sắp đặt cho nó
    Ưu điểm cũng chính là nhược điểm. Story Point chưa bao giờ được tạo ra với dự định là sẽ trở thành một thước đo hiệu suất. Việc ước lượng Story Point chỉ là ước lượng, không phải dự báo. Nhưng, chúng đang được sử dụng để so sánh năng lực giữa các nhóm với nhau.
    Scrum chưa bao giờ dự định bó buộc các nhóm vào một cam kết “làm hay là chết”. Story Point tượng trưng cho một sự ước tính theo kiểu vừa ước đoán vừa lập luận “tốt vừa đủ” về quy mô liên quan trong một dự án. Nếu toàn bộ dự định về tính linh động (intent of Agility) là để cho phép các tổ chức phản ứng với những thay đổi theo kế hoạch, thì chúng ta không có được lợi ích đẩy đủ của Scrum.
    Trong phần sau và cũng là phần cuối về ước lượng story point, chúng ta sẽ xem xét những ưu điểm và nhược điểm của story point để tạo điều kiện cho các nhóm nâng cao chất lượng và những vai trò nhất định không hiểu story point từ góc độ kinh doanh.
    KAUSHAL AMIN
    Chief Technology Officer

    Người dịch: Trà Giang, 20180510