Katakanlah Anda baru saja mulai bekerja dalam tim yang sangat kecil pada proyek {saat ini relatif kecil, meskipun semoga lebih besar nanti}. Perhatikan bahwa ini adalah proyek aktual yang dimaksudkan untuk digunakan oleh pengembang lain di dunia nyata, bukan proyek akademik yang dimaksudkan untuk dihapus pada akhir semester.
Namun, kode belum dirilis ke orang lain, jadi belum ada keputusan yang ditetapkan.
Metodologi
Salah satu dari Anda suka memulai pengkodean dan membuat potongan-potongan tersebut cocok bersama saat Anda pergi sebelum Anda tentu memiliki gagasan yang jelas tentang bagaimana sebenarnya semua komponen akan berinteraksi (desain bottom-up). Salah satu dari Anda lebih suka melakukan seluruh desain terlebih dahulu dan memakukan rincian semua komponen dan komunikasi sebelum mengkode solusi.
Asumsikan bahwa Anda bekerja pada sistem baru daripada meniru yang sudah ada, dan dengan demikian tidak selalu jelas seperti apa desain akhir yang tepat. Jadi, di tim Anda, anggota tim yang berbeda kadang-kadang memiliki gagasan yang berbeda tentang persyaratan apa yang bahkan diperlukan untuk produk akhir, apalagi bagaimana cara mendesainnya.
Ketika pengembang bottom-up menulis beberapa kode, pengembang top-down menolaknya karena potensi masalah di masa depan yang dibayangkan dalam desain terlepas dari kenyataan bahwa kode dapat menyelesaikan masalah, percaya bahwa lebih penting untuk mendapatkan desain yang benar sebelum mencoba kode solusi untuk masalah tersebut.
Ketika pengembang top-down mencoba untuk mengerjakan desain penuh dan masalah yang dibayangkan sebelum mulai menulis kode, pengembang bottom-up menolaknya karena pengembang bottom-up tidak berpikir beberapa masalah akan benar-benar muncul dalam praktik , dan berpikir bahwa desain mungkin perlu diubah di masa depan ketika persyaratan dan kendala menjadi lebih jelas.
Masalah
Masalah yang diakibatkan oleh hal ini adalah bahwa pengembang dari bawah ke atas pada akhirnya membuang-buang waktu karena pengembang dari atas ke bawah sering memutuskan solusi yang ditulis oleh pengembang dari bawah ke atas harus dihapus karena cacat desain, sehingga perlu untuk -menulis kode.
Pengembang top-down akhirnya membuang-buang waktu karena alih-alih memparalelkan pekerjaan, pengembang top-down sekarang sering duduk untuk mengerjakan desain yang benar dengan pengembang bottom-up, membuat serial keduanya ke titik di mana bahkan mungkin lebih cepat untuk 1 orang melakukan pekerjaan daripada 2.
Kedua pengembang ingin tetap bekerja bersama, tetapi tampaknya kombinasi tersebut sebenarnya tidak membantu salah satu dari mereka dalam praktik.
Tujuan
Tujuan umum jelas untuk memaksimalkan efektivitas pengkodean (yaitu meminimalkan pemborosan waktu) dan menulis perangkat lunak yang bermanfaat.
Pertanyaan
Sederhananya, bagaimana Anda mengatasi masalah ini dan mengatasi situasi ini?
Satu-satunya solusi efisien yang dapat saya pikirkan yang tidak membuang waktu adalah membiarkan setiap pengembang mengikuti gayanya sendiri untuk desain. Tapi ini lebih sulit daripada kedengarannya ketika Anda meninjau kode dan benar-benar perlu menyetujui perubahan satu sama lain, dan ketika Anda mencoba merancang kerangka kerja yang koheren untuk digunakan orang lain.
Apakah ada cara yang lebih baik?