Apakah biasa memisahkan back-end dan front-end menjadi dua posisi pada proyek pengembangan web?

31

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?

lamp_scaler
sumber

Jawaban:

29

Inilah kebijaksanaan saya dari 14 tahun pengalaman:

  • jika Anda memiliki startup, jangan menetapkan peran. Harapan yang lebih baik bahwa Anda membentuk tim pengorganisasian diri yang baik. Jika semua orang saling kenal, semua orang tahu siapa yang melakukan yang terbaik. Seorang manajer proyek hanya akan menghalangi.
  • kemudian, perbedaan antara front-end dan back-end masuk akal. Di backend, kualitas adalah prio satu. Kode harus berkinerja, aman, dan aman untuk bertransaksi. Di front-end, waktu implementasi penting. Dan Anda harus dapat mengandalkan back-end yang baik. Tujuan yang berbeda dari front-end tidak bekerja dengan baik.
  • back-end seharusnya sudah ada sebelum front-end coder mulai berfungsi. Jika tidak, pembuat kode front-end akan diperlambat terlalu banyak.
  • backend harus dapat bereaksi cepat pada persyaratan front-end agar tidak memperlambatnya
rdmueller
sumber
7
+1 untukif 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.
Qwerky
7
Kualitas -1 sama pentingnya di ujung depan.
Florian Margaine
2
Ya, kualitas juga penting di front-end, tetapi bug tidak akan memiliki konsekuensi yang sama dengan bug di back-end. Contoh: di back-end Anda harus transaksi aman, di front-end Anda (mudah-mudahan) menggunakan backend transaksi aman :-)
rdmueller
4
@Ralf dan jika 40% pengguna Anda tidak dapat melakukan transaksi karena antarmuka keluar, maka tidak masalah apakah transaksi itu aman atau tidak. Kualitas persis sama pentingnya di ujung depan dan di ujung belakang.
Racheet
1
@Racheet: mungkin saya seharusnya menyatakan ini dengan cara yang berbeda. Saya kira apa yang ingin saya katakan adalah kualitas apeknya berbeda. Backend harus melindungi frontend dari masalah tertentu seperti keamanan transaksi. Jika dilakukan dengan benar, Anda hanya perlu peduli dengan transaksi di frontend, tetapi Anda masih harus peduli tentang fungsionalitas, kegunaan, desain, dll. Kegunaan dan desain adalah aspek yang hampir tidak ada di backend - hanya karena tidak ada frontend: -)
rdmueller
26

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:

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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.

  7. 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.

  8. 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:

  1. 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.

  2. 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'.

  3. 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:

  1. 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.

  2. 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.

  3. 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.

Marcus Pope
sumber
5

Saya pikir pertanyaannya salah.

Semua startup yang saya ikuti tidak memiliki arsitektur FE-BE saja.

Kebanyakan startup yang saya kenal memiliki:

  • Core - produk aktual yang memperlihatkan antarmuka
  • UI - BE dan FE. BE menggunakan API Inti.

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

  • Sumber daya statis paling baik dilayani dari server depan. Karena server Front-End (misalnya nginx) sangat kuat dan karena Anda dapat menggunakan Cache untuk sumber daya statis, Anda dapat mengelola dengan satu penyebaran sumber daya statis Anda (yang seharusnya semua konten HTML, JS, CSS, Gambar).
  • Kode backend tidak memiliki kemewahan yang sama, jadi Anda harus memiliki sistem terdistribusi - yang juga dikelola oleh server-depan.
  • Kode FE harus digunakan kembali dengan semua teknologi baru yang mendukung JavaScript. Anda sekarang dapat menulis aplikasi Desktop dan Mobile dengan JavaScript.
  • Proses pembuatannya benar-benar berbeda - dan itu bahkan dapat mencakup pengiriman tambalan, peningkatan, pemasangan dll.

Saya dapat melanjutkan, tetapi saya harap jelas bahwa saya pikir BE dan FE harus tim yang sama, tetapi mungkin proyek yang berbeda.

orang mograbi
sumber
0

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