Pada startup web, apakah lebih umum untuk memiliki insinyur yang bekerja di front-end DAN back-end fitur (pada dasarnya bertanggung jawab atas seluruh fitur)? Atau apakah para insinyur memisahkan antara back-end dan front-end?
Yang mana yang lebih menguntungkan dan untuk situasi apa?
Kelemahannya, saya perhatikan, berkenaan dengan memiliki satu insinyur yang bertanggung jawab atas seluruh fitur adalah bahwa orang tersebut mungkin hanya kuat dalam pengembangan frontend atau backend tetapi tidak keduanya, sehingga terkadang memiliki penurunan dalam kecepatan dan kualitas.
Memiliki pengembang frontend dan backend pada satu fitur meningkatkan kecepatan fitur dan kualitas DAN mendorong kolaborasi. Tetapi saya khawatir tentang memiliki 2 insinyur yang mengerjakan satu fitur yang mungkin menggunakan sumber daya yang buruk karena 1 insinyur dapat ditempatkan pada fitur lain untuk dikerjakan.
Apa praktik umum / terbaik untuk alokasi sumber daya rekayasa backend / frontend pada startup tahap awal yang kecil? Dan kemudian bagaimana itu akan berubah saat ia tumbuh?
sumber
if you have a startup, don't assign roles. Better hope that you assembled a good self organizing team. If everybody knows each other, everybody knows who does what the best.
Jawaban terbaik adalah dari @ Hiu, tetapi hanya bagian terakhir "Itu tergantung." Dalam pengalaman saya, ~ 16 tahun atau lebih, saya telah melihat kedua opsi dicoba dalam berbagai konfigurasi yang berbeda. Menjadi pengembang tumpukan penuh, inilah yang saya pelajari:
* (BE = Back End, FE = Front End)
Peringatan Umum Pembangunan Split Stack:
Praktik pengembangan tangkas (strategi umum saat ini) merekomendasikan pengembangan fitur, di mana fitur tersebut merupakan satu fungsi fungsional yang berharga dari perspektif pelanggan. Dari perspektif ini Anda harus memiliki pengembang Anda mengimplementasikan keduanya.
Memisahkan tumpukan di sepanjang batas server menciptakan titik integrasi antara kedua pengembang. Kecuali jika mereka berkomunikasi secara efektif dan bekerja bersama dengan baik, ini akan menyebabkan banyak bug ketika kedua fitur tersebut bergabung.
Terapkan aturan komunikasi n (n-1) / 2 dari Mythical Man-Month dan Anda akan melihat bahwa fitur pemisahan dalam dua bagian antara dua orang akan meningkatkan keseluruhan beban kerja Anda. Memang aturan itu berlaku untuk fitur juga, tetapi membagi tumpukan menggandakan jumlah komunikasi.
Seorang desainer akan memecahkan masalah pengembang BE yang tidak dapat menghasilkan antarmuka yang menarik dari awal. Ini mengasumsikan mereka setidaknya tahu html & css dan dapat menghasilkan antarmuka yang cocok dengan tangkapan layar yang dibuat oleh perancang.
Fitur biasanya adalah komponen terisolasi yang berinteraksi sangat sedikit dengan fitur lainnya. Ini tidak selalu terjadi tetapi biasanya titik interaksi berada pada level rendah seperti database atau sistem file. Jadi tidak banyak yang mencegah pengembang tumpukan penuh untuk mengimplementasikan fitur mereka. Tetapi jika pengembang FE harus menunggu pengembang BE untuk menyelesaikan tugas, itu akan menambah lebih banyak penundaan di atas hilangnya produktivitas di poin 3.
Web2.0 mengaburkan perbedaan antara FE & BE lebih jauh. Dengan kerangka kerja MVC, dan seluruh aplikasi yang dibangun di sisi klien, banyak pengetahuan BE sekarang diperlukan untuk mengimplementasikan aplikasi FE yang aman dan efisien.
Keluhan terbesar saya terhadap praktik ini adalah membatasi kemampuan semua orang yang terlibat dalam proyek. Meskipun ini adalah praktik umum pada awal 2000-an itu dilakukan karena kebutuhan karena menemukan pengembang yang bisa melakukan keduanya cukup sulit (murni karena kebaruan bukan karena beberapa kesulitan intrinsik dalam mempelajari keduanya.) Yang tersisa dari praktik ini adalah satu dekade kemudian kami masih memiliki "pengembang web" yang tidak tahu CSS.
Keluhan terbesar kedua saya adalah bahwa hal itu dapat dengan mudah membagi segmen tim pengembangan. Pengembang FE membuat bug setelah memodifikasi kode BE dan tim memberikan suara untuk membatasi pengembangan lintas-tumpukan grosir. Sementara ulasan kode dan pendidikan dapat menyelesaikan masalah, orang menjadi teritorial.
Manfaat / Penggunaan-Kasus Pengembangan Stack Split:
API yang tenang sempurna untuk penggambaran ini karena tidak ada FE. Seringkali sebuah perusahaan akan bekerja pada RESTful API terlebih dahulu, dan kemudian mengembangkan aplikasi web mereka di atas. Dalam hal ini ada alasan kuat untuk menjaga agar tim BE tetap fokus pada versi utama berikutnya ketika FE sedang menyelesaikan aplikasi. Tetapi bahaya churn masih ada - terutama jika informasi baru yang ditemukan pada fase dev FE memerlukan modifikasi non-sepele untuk API BE.
Beban kerja yang tidak seimbang antara FE & BE juga merupakan kasus yang baik untuk membuat tim FE saja. Sekali lagi ini sangat situasional di mana mungkin pengembangan utama dilakukan melalui aplikasi desktop dan perusahaan sedang mencoba untuk mengembangkan antarmuka web 'lite'.
Pelatihan pengembang baru / junior. Jika Anda menyewa pekerja magang atau pengembang junior dan khawatir akan melemparkan mereka ke tempat yang tidak layak, itu adalah pilihan yang baik untuk menginvestasikan sebagian biaya komunikasi / integrasi ke dalam sistem pengembangan rekan.
Kekhawatiran tentang jawaban yang diterima @ Ralf di halaman ini:
Poin pertama cukup berani - dan itu akan gagal dengan cepat jika Anda tidak memiliki salah satu dari "tim pengorganisasian diri yang baik". Bahkan jika Anda memiliki tim itu, Anda dan kepentingan mereka untuk mendorong batasan mereka. Dan tim yang bisa mengatur diri sendiri dengan baik tidak selalu memiliki motivasi untuk melakukannya.
Poin kedua Anda salah. Pengembangan web modern membutuhkan kode FE yang performan, aman, aman asinkron, tahan XSS, lintas-browser, dan dikembangkan dengan cepat. Sasarannya hanya tidak bersaing dengan BE mereka secara efektif sama.
Poin ketiga juga merupakan asumsi yang buruk - pengembangan FE dapat dimulai dengan html murni / css / js tanpa kerja dasar BE. Dari sana hanya upaya sepele untuk memecahnya menjadi template untuk rendering BE. Seringkali yang terbaik adalah memulai dengan pekerjaan FE karena akan memberikan perasaan hangat & kabur kepada para pemangku kepentingan untuk melihat kemajuan visual di depan.
Kesimpulan:
Jika Anda seorang pemula dan Anda tidak punya banyak waktu atau uang untuk dibakar, maka jangan mempekerjakan pengembang FE atau BE saja. Pekerjakan pengembang web tingkat senior dan ux / desainer yang baik, dan mereka akan mendapatkan aplikasi Anda secepat mungkin. Harganya lebih mahal, tetapi jauh lebih produktif dan Anda akan membutuhkan lebih sedikit.
sumber
Saya pikir pertanyaannya salah.
Semua startup yang saya ikuti tidak memiliki arsitektur FE-BE saja.
Kebanyakan startup yang saya kenal memiliki:
API bersifat stateless dan mudah diejek - bahkan tanpa membutuhkan Pengembang Inti. Sial, jika saya harus memulai proyek dari awal, saya mungkin mulai dengan seluruh UI yang bekerja murni pada tiruan - yang akan bagus untuk presentasi. Sebagian besar umpan balik adalah karena UI. Pelanggan mencatat bahwa lebih banyak - (tergantung pada audiens target Anda.)
Misalnya - Google Search memiliki komponen Core yang merayapi web, mengindeksnya dll. Dan Google UI adalah dunia yang sama sekali berbeda. Inti ini dapat dengan mudah mendukung pencarian non WWW, sedangkan UI tidak bisa.
Dengan cara ini UI Anda "pluggable" dan Anda memiliki masalah yang terpisah.
Anda merujuk pada Pengetahuan pengembangan, namun Anda mengabaikan aspek manajemen proyek. Sementara tim inti mungkin membutuhkan durasi sprint 2 minggu, tim UI akan menggunakan CI - semuanya diunggah sepanjang waktu. Tim Inti akan membutuhkan kompatibilitas ke belakang sementara UI tidak akan.
Bahasa berbeda. Anda mungkin ingin pengembang C untuk komponen Core - dan Anda akan baik-baik saja jika berjalan pada satu OS, sedangkan UI akan ditulis dalam Bahasa Cross OS.
Tes berbeda. Dunia pengujian UI adalah salah satu yang paling kompleks yang saya tahu dalam pengembangan perangkat lunak. Sebagian besar startup mengabaikannya dan menyesali keputusan ini di kemudian hari. Anda tidak dapat memisahkan BE dan FE saat pengujian. Itu harus menjadi unit tunggal yang menanganinya.
Open Source UI - salah satu manfaat terbesar dari memisahkan keduanya adalah Anda dapat open source UI Anda. Proyek UI membutuhkan dukungan sumber terbuka.
Saya tidak dapat membayangkan pengembang UI yang tidak dapat memahami seluruh
session
fitur. Anda tahu - tempat Anda masuk dan tetap masuk di antara berbagai permintaan. Benar mereka mungkin tahu PHP dan bukan Java .. tetapi konsep BE harus jelas (misalnya menggunakan cookie terenkripsi). Hambatan bahasa tertentu salah - setiap pengembang harus mau bekerja dalam bahasa apa pun. Siapa yang mengira mereka akan menulis BE dalam JavaScript beberapa tahun yang lalu?Jika Anda terus memiliki 3 tim: Core, BE dan FE, itu adalah pemborosan sumber daya. Bagaimana dengan DB? Anda harus memiliki DBA? Mengapa pengembang BE mengetahui DB dan pengembang FE tidak tahu BE dan DB? Tidak ada batasan.
Jika Anda memerlukan ahli, dan Anda akan melakukannya, outsourcing mereka bekerja dengan cukup baik. Mereka biasanya memberikan kode kualitas dan mereka melakukannya dengan sangat cepat. Anda tidak perlu menginginkannya di rumah karena Anda akan tersesat jika mereka pergi. Selain itu Anda bisa mendapatkan saran hebat online hari ini. Barang-barang canggih mungkin memerlukan pendekatan yang berbeda.
Jadi hasilnya pada dasarnya adalah BE yang sangat tipis di UI yang dapat dikembangkan oleh setiap pengembang FE. Jika Anda memiliki BE yang tebal di UI Anda kemungkinan besar memiliki beberapa fungsionalitas API yang diperlukan dalam Core.
Selalu ada setidaknya satu pengembang yang menonjol dari yang lain. Mengingat FE yang tipis, ia dapat mengelola memberikan dukungan (tidak mengembangkan) pengembang lain dalam kode BE. Pendapat saya adalah bahwa pengembang ini berada dalam posisi yang sangat baik dan harus diberikan secara tepat (bukan dalam gaji, sesuatu yang lain). Saya juga percaya bahwa mereka akan dapat menangani proses pembangunan dan pembangunan dengan benar.
Model ini memberi Anda fleksibilitas besar terkait pengembangan BE. Dunia BE telah mengetahui beberapa perubahan haluan dalam beberapa tahun terakhir, jadi saya tidak merekomendasikan terlalu mengandalkan stabilitas BE. Inti adalah cerita yang berbeda.
Masih ada pertanyaan - haruskah FE dan BE menjadi proyek yang sama ? Anda harus perhatikan yang berikut ini
Saya dapat melanjutkan, tetapi saya harap jelas bahwa saya pikir BE dan FE harus tim yang sama, tetapi mungkin proyek yang berbeda.
sumber
Saya pikir implementasi yang sukses bisa menjadi beberapa hal. Jika ada pengembang tunggal yang memiliki backend yang kuat tetapi juga memiliki pemahaman yang baik pada antarmuka pengguna dan semua bagian "front-end", maka itu mungkin bisa berhasil. Itu tidak biasanya terjadi (dalam pengalaman pribadi saya). Sebagai contoh, saya menganggap diri saya sebagai pengembang back-end. Tetapi saya mengerjakan banyak proyek sendiri. Apakah saya mengerjakan presentasi dan potongan sisi klien? Yakin. Apakah mereka terlihat sebagus yang dihasilkan oleh perancang berbakat dan pengembang sisi klien? Benar-benar tidak.
Semuanya memberi dan menerima. Tapi jangan biarkan kolaborasi dua pengembang membuat Anda ragu. Ada cara yang sudah dicoba dan benar untuk memaksimalkan produksi antara pengembang dan desainer.
Dengan kata lain ... Itu tergantung
sumber