Chu kỳ bạn mô tả là bình thường. Cách để cải thiện mọi thứ không phải là tránh chu kỳ này, mà là hợp lý hóa nó. Bước đầu tiên là chấp nhận rằng:
- Gần như không thể biết mọi thứ vào ngày đầu tiên của dự án.
- Ngay cả khi bạn bằng cách nào đó biết tất cả mọi thứ, vào thời điểm bạn hoàn thành dự án thì một cái gì đó (yêu cầu của khách hàng, thị trường mà họ đang làm việc, công nghệ bạn đang làm việc, mong muốn của khách hàng) sẽ thay đổi và thực hiện tại ít nhất là một phần của những gì bạn biết không hợp lệ hoặc không chính xác.
Do đó, không thể lập kế hoạch cho mọi thứ ở phía trước, và thậm chí nếu bạn có thể, theo kế hoạch đó sẽ dẫn bạn xây dựng một cái gì đó không hoàn hảo hoặc lỗi thời. Biết được điều này, chúng tôi tích hợp thay đổi vào kế hoạch của chúng tôi. Hãy xem các bước của bạn:
- Bắt đầu với một vài trường hợp sử dụng
- Bắt đầu viết mã
- Nhận ra một số điều tôi đã xử lý không tốt và không phù hợp với cơ sở mã hiện tại.
- Viết lại phần lớn mã
Đó thực sự là một điểm khởi đầu tuyệt vời. Đây là cách tôi tiếp cận nó:
1. Bắt đầu với một vài trường hợp sử dụng
Tốt Bằng cách nói "trường hợp sử dụng", bạn đang tập trung vào phần mềm dùng để làm gì . Bằng cách nói "một vài", bạn không cố gắng khám phá mọi thứ; bạn đang gắn bó với một khối lượng công việc có thể quản lý. Tất cả tôi muốn thêm ở đây là để ưu tiên chúng. Với khách hàng hoặc người dùng cuối của bạn, hãy tìm ra câu trả lời cho câu hỏi này:
Phần mềm nhỏ nhất, đơn giản nhất tôi có thể cung cấp cho bạn sẽ cải thiện tình hình của bạn là gì?
Đây là sản phẩm khả thi tối thiểu của bạn - bất cứ điều gì nhỏ hơn điều này không hữu ích cho người dùng của bạn, nhưng bất cứ điều gì rủi ro lớn hơn đều lên kế hoạch quá sớm. Nhận đủ thông tin để xây dựng này, sau đó di chuyển trên. Hãy chú ý rằng bạn sẽ không biết mọi thứ vào thời điểm này.
2. Bắt đầu viết mã.
Tuyệt quá. Bạn được làm việc càng sớm càng tốt. Cho đến khi bạn viết mã, khách hàng của bạn đã nhận được lợi ích bằng không. Bạn càng dành nhiều thời gian lên kế hoạch, khách hàng càng mất nhiều thời gian chờ đợi mà không hoàn vốn.
Ở đây, tôi muốn thêm một lời nhắc để viết mã tốt . Ghi nhớ và tuân theo các Nguyên tắc RẮN , viết các bài kiểm tra đơn vị đàng hoàng xung quanh bất cứ điều gì mong manh hoặc phức tạp, ghi chú về bất cứ điều gì bạn có thể quên hoặc điều đó có thể gây ra vấn đề sau này. Bạn muốn cấu trúc mã của mình để thay đổi sẽ không gây ra vấn đề. Để làm điều này, mỗi khi bạn đưa ra quyết định để xây dựng một cái gì đó này cách thay vì đó bằng cách nào, bạn cấu trúc mã của bạn để càng ít mã càng tốt bị ảnh hưởng bởi quyết định đó. Nói chung, một cách tốt để làm điều này là tách mã của bạn:
- sử dụng các thành phần đơn giản, riêng biệt (tùy thuộc vào ngôn ngữ và tình huống của bạn, thành phần này có thể là chức năng, lớp, lắp ráp, mô-đun, dịch vụ, v.v. Bạn cũng có thể có một thành phần lớn được xây dựng từ các thành phần nhỏ hơn, như một lớp có nhiều hàm hoặc một tập hợp có nhiều lớp.)
- mỗi thành phần thực hiện một công việc hoặc các công việc liên quan đến một việc
- thay đổi cách thức một thành phần hoạt động bên trong của nó không nên làm cho các thành phần khác phải thay đổi
- các thành phần nên được cung cấp cho những thứ họ sử dụng hoặc phụ thuộc, thay vì tìm nạp hoặc tạo chúng
- các thành phần nên cung cấp thông tin cho các thành phần khác và yêu cầu chúng thực hiện công việc, thay vì tìm nạp thông tin và tự thực hiện công việc
- các thành phần không nên truy cập, sử dụng hoặc phụ thuộc vào hoạt động bên trong của các thành phần khác - chỉ sử dụng các chức năng có thể truy cập công khai của chúng
Bằng cách này, bạn sẽ tách biệt các tác động của thay đổi để trong hầu hết các trường hợp, bạn có thể khắc phục sự cố ở một nơi và phần còn lại của mã của bạn không nhận thấy.
3. Gặp phải các vấn đề hoặc thiếu sót trong thiết kế.
Điều này sẽ xảy ra. Đó là điều không thể tránh khỏi. Chấp nhận điều này. Khi bạn gặp một trong những vấn đề này, hãy quyết định loại vấn đề đó là gì.
Một số vấn đề là các vấn đề trong mã hoặc thiết kế của bạn khiến bạn khó thực hiện những gì phần mềm nên làm. Đối với những vấn đề này, bạn cần quay lại và thay đổi thiết kế của mình để khắc phục sự cố.
Một số vấn đề xảy ra do không có đủ thông tin hoặc do có điều gì đó mà trước đây bạn không nghĩ đến. Đối với những vấn đề này, bạn cần quay lại với người dùng hoặc khách hàng của mình và hỏi họ xem họ muốn giải quyết vấn đề như thế nào. Khi bạn có câu trả lời, sau đó bạn đi và cập nhật thiết kế của bạn để xử lý nó.
Trong cả hai trường hợp, bạn nên chú ý đến phần nào trong mã của bạn phải thay đổi và khi bạn viết thêm mã, bạn nên suy nghĩ về phần nào có thể phải thay đổi trong tương lai. Điều này giúp dễ dàng tìm ra phần nào có thể quá liên kết với nhau và phần nào có thể cần được cách ly hơn.
4. Viết lại một phần của mã
Khi bạn đã xác định cách bạn cần thay đổi mã, bạn có thể thực hiện thay đổi. Nếu bạn đã cấu trúc mã của mình tốt, thì điều này thường sẽ chỉ liên quan đến việc thay đổi một thành phần, nhưng trong một số trường hợp, nó cũng có thể liên quan đến việc thêm một số thành phần. Nếu bạn thấy rằng bạn phải thay đổi nhiều thứ ở nhiều nơi, thì hãy nghĩ về lý do tại sao. Bạn có thể thêm một thành phần giữ tất cả các mã này bên trong chính nó, và sau đó có tất cả những nơi này chỉ sử dụng thành phần đó không? Nếu bạn có thể, hãy làm như vậy và lần sau bạn phải thay đổi tính năng này, bạn sẽ có thể làm điều đó ở một nơi.
5. Kiểm tra
Một nguyên nhân phổ biến của các vấn đề trong phần mềm là không biết rõ các yêu cầu. Đây thường không phải là lỗi của nhà phát triển - thông thường, người dùng không chắc chắn họ cần gì. Cách dễ nhất để giải quyết điều này là đảo ngược câu hỏi. Thay vì hỏi "bạn cần phần mềm để làm gì?", Mỗi lần bạn thực hiện các bước này, hãy cung cấp cho người dùng những gì bạn đã xây dựng cho đến nay và hỏi họ "Tôi đã xây dựng cái này - nó có làm những gì bạn cần không?". Nếu họ nói có, thì bạn đã xây dựng một cái gì đó giải quyết vấn đề của họ và bạn có thể ngừng hoạt động! Nếu họ nói không, thì họ sẽ có thể cho bạn biết một cách cụ thể hơn những gì sai với phần mềm của bạn và bạn có thể cải thiện điều cụ thể đó và quay lại để nhận thêm phản hồi.
6. Học
Khi bạn trải qua chu trình này, hãy chú ý đến những vấn đề bạn đang tìm kiếm và những thay đổi bạn đang thực hiện. Có mẫu nào không? Bạn có thể cải thiện?
Vài ví dụ:
- Nếu bạn tiếp tục phát hiện ra rằng bạn đã bỏ qua một quan điểm nhất định của người dùng, bạn có thể khiến người dùng đó tham gia nhiều hơn vào giai đoạn thiết kế không?
- Nếu bạn cứ phải thay đổi mọi thứ để tương thích với công nghệ, bạn có thể xây dựng thứ gì đó để giao diện giữa mã của bạn và công nghệ đó để bạn chỉ phải thay đổi giao diện không?
- Nếu người dùng liên tục thay đổi suy nghĩ về từ ngữ, màu sắc, hình ảnh hoặc những thứ khác trong giao diện người dùng, bạn có thể xây dựng một thành phần cung cấp cho phần còn lại của ứng dụng để tất cả chúng ở cùng một nơi không?
- Nếu bạn thấy rằng rất nhiều thay đổi của bạn nằm trong cùng một thành phần, bạn có chắc chắn thành phần đó chỉ dính vào một công việc không? Bạn có thể chia nó thành một vài phần nhỏ hơn? Bạn có thể thay đổi thành phần này mà không cần phải chạm vào bất kỳ người khác?
Nhanh nhẹn
Những gì bạn đang hướng tới đây là một phong cách làm việc được gọi là Agile. Agile không phải là một phương pháp, đó là một nhóm các phương pháp kết hợp toàn bộ tải trọng của mọi thứ (Scrum, XP, Kanban, để đặt tên cho một số thứ) nhưng điểm chung của tất cả chúng là ý tưởng rằng mọi thứ thay đổi và là nhà phát triển phần mềm, chúng tôi nên có kế hoạch thích ứng với những thay đổi hơn là tránh hoặc bỏ qua chúng. Một số nguyên tắc cốt lõi của nó - cụ thể là những nguyên tắc phù hợp với tình huống của bạn - là như sau:
- Đừng có kế hoạch xa hơn bạn có thể dự đoán với sự tự tin
- Trợ cấp cho những thứ thay đổi khi bạn đi
- Thay vì xây dựng một cái gì đó lớn trong một lần, hãy xây dựng một cái gì đó nhỏ và sau đó tăng dần nó
- Giữ người dùng cuối tham gia vào quá trình và nhận được phản hồi nhanh chóng, thường xuyên
- Kiểm tra công việc và tiến bộ của chính bạn, và học hỏi từ những sai lầm của bạn