Kapan Pipeline Harus Berhenti dan Menunggu Manusia?

Bayangkan ini: tim Anda memiliki pipeline CI/CD yang solid. Pengujian berjalan otomatis. Pemeriksaan keamanan lolos. Kode dibangun dan di-deploy ke staging tanpa ada yang perlu mengangkat jari. Lalu, tepat sebelum produksi, pipeline berhenti. Sebuah notifikasi muncul: "Persetujuan diperlukan."

Seseorang harus mengklik "Setujui" sebelum deployment dilanjutkan. Mungkin orang itu adalah tech lead Anda. Mungkin engineering manager. Mungkin mereka sedang rapat, atau sudah offline untuk hari itu. Deployment pun tertahan, menunggu.

Momen ini mengungkap ketegangan yang dihadapi setiap tim. Seberapa banyak pipeline harus memutuskan sendiri? Dan kapan harus berhenti dan meminta penilaian manusia?

Dua Jenis Pemeriksaan

Setiap pipeline memiliki titik pemeriksaan. Sebelum perubahan berpindah dari satu tahap ke tahap berikutnya, sesuatu memverifikasi bahwa aman untuk melanjutkan. Titik pemeriksaan itu bisa berupa salah satu dari dua hal: gate otomatis atau persetujuan manual.

Gate otomatis adalah pemeriksaan yang berjalan di dalam pipeline tanpa campur tangan manusia. Pipeline menjalankan serangkaian pengujian atau validasi, lalu memutuskan apakah perubahan dapat dilanjutkan. Misalnya, setelah pengembang mendorong kode baru, pipeline menjalankan pengujian unit. Jika semua pengujian lolos, perubahan berlanjut. Jika ada pengujian yang gagal, pipeline berhenti dan memberi tahu tim.

Persetujuan manual adalah keputusan yang dibuat oleh seseorang. Biasanya orang itu adalah lead engineer, tech lead, atau seseorang yang bertanggung jawab atas lingkungan tertentu. Mereka meninjau perubahan, mempertimbangkan konteksnya, lalu menyetujui atau menolaknya. Pipeline menunggu hingga keputusan itu masuk.

Keduanya memiliki tujuan yang sama: mencegah perubahan buruk untuk melanjutkan. Namun, keduanya beroperasi dengan cara yang sangat berbeda.

Diagram di bawah menunjukkan bagaimana kedua jenis pemeriksaan ini cocok dalam pipeline deployment:

flowchart TD A[Perubahan masuk ke pipeline] --> B{Gate otomatis?} B -->|Ya| C[Jalankan pemeriksaan otomatis] C --> D{Lolos?} D -->|Ya| E[Lanjut ke tahap berikutnya] D -->|Tidak| F[Berhenti & beri tahu tim] B -->|Tidak| G{Persetujuan manual?} G -->|Ya| H[Tunggu keputusan manusia] H --> I{Setujui?} I -->|Ya| E I -->|Tidak| F E --> J[Tahap pipeline berikutnya]

Keunggulan Gate Otomatis

Argumen terkuat untuk gate otomatis adalah konsistensi. Setiap kali perubahan masuk ke pipeline, pemeriksaan yang sama berjalan dengan cara yang sama. Tidak ada yang terlewat karena seseorang lupa. Tidak ada yang terburu-buru karena tenggat waktu sudah dekat. Pipeline tidak lelah, tidak terganggu, dan tidak pilih kasih.

Jika pengujian Anda menyeluruh dan pemeriksaan Anda benar, gate otomatis memberi Anda dasar yang andal. Setiap perubahan yang melewati gate tersebut memenuhi standar minimum. Anda tidak perlu bertanya-tanya apakah seseorang memotong jalan atau melewatkan langkah.

Gate otomatis juga berskala. Tim yang terdiri dari lima pengembang mungkin dapat meninjau setiap perubahan secara manual. Tim yang terdiri dari lima puluh orang tidak bisa. Pipeline dapat menjalankan ratusan pemeriksaan dalam hitungan menit, sementara peninjau manusia akan membutuhkan waktu berjam-jam untuk melakukan pekerjaan yang sama.

Keterbatasan Gate Otomatis

Namun, gate otomatis memiliki titik buta. Mereka hanya dapat memeriksa apa yang telah Anda programkan untuk diperiksa. Mereka tidak bisa membaca situasi. Mereka tidak bisa merasakan suasana hati tim atau keadaan produksi. Mereka tidak bisa membuat penilaian berdasarkan pengalaman.

Pipeline dapat memverifikasi bahwa semua pengujian unit lolos. Ia tidak dapat memberi tahu Anda apakah perubahan tertentu aman untuk di-deploy selama lalu lintas Black Friday. Ia dapat memeriksa bahwa skrip migrasi database Anda berjalan tanpa kesalahan sintaks. Ia tidak dapat memberi tahu Anda apakah menjalankan migrasi itu pada jam 3 sore hari Selasa adalah ide yang buruk.

Gate otomatis sangat baik dalam menjawab "apakah ini memenuhi kriteria teknis?" Mereka sangat buruk dalam menjawab "haruskah kita melakukan ini sekarang?"

Kapan Anda Membutuhkan Manusia

Di sinilah persetujuan manual menunjukkan tempatnya. Manusia dapat mempertimbangkan faktor-faktor yang tidak dapat ditangkap oleh pengujian apa pun:

  • Apakah ini waktu yang tepat untuk deploy? Mungkin produksi sudah tidak stabil. Mungkin kampanye pemasaran besar baru saja diluncurkan. Mungkin engineer on-call sedang menangani insiden dan tidak boleh terganggu oleh deployment.

  • Apakah perubahan ini memerlukan koordinasi? Mungkin deployment memengaruhi layanan tim lain. Mungkin tim database perlu mengetahui perubahan skema. Mungkin tim QA ingin menjalankan smoke test terakhir sebelum perubahan mencapai pengguna.

  • Apakah risikonya dapat diterima? Perbaikan bug kecil mungkin aman untuk di-deploy pada Jumat sore. Refaktor besar mungkin tidak. Manusia dapat mempertimbangkan risiko berdasarkan pengalaman dan konteks.

Persetujuan manual juga menciptakan akuntabilitas. Ketika seseorang menyetujui deployment, mereka membubuhkan nama mereka di atasnya. Ini bukan tentang menyalahkan. Ini tentang memiliki catatan yang jelas bahwa seseorang meninjau perubahan dan membuat keputusan sadar. Jika terjadi kesalahan, tim dapat melihat ke belakang dan memahami apa yang dipertimbangkan sebelum deployment.

Cara Memutuskan di Antara Keduanya

Pertanyaan umum adalah: pemeriksaan mana yang harus diotomatiskan, dan mana yang memerlukan manusia?

Jawabannya tergantung pada sifat pemeriksaan. Validasi teknis yang dapat dikodifikasi harus menjadi gate otomatis. Pengujian, pemindaian keamanan, linting, pemeriksaan format, audit dependensi—semua ini adalah hal yang dapat dilakukan mesin lebih cepat dan lebih konsisten daripada manusia.

Keputusan yang memerlukan penilaian, konteks, atau koordinasi harus menjadi persetujuan manual. Keputusan waktu, penilaian risiko, koordinasi lintas tim, dan evaluasi dampak bisnis sebaiknya diserahkan kepada manusia.

Namun, ada nuansa di sini. Hanya karena sesuatu dapat diotomatiskan bukan berarti harus menjadi gate. Beberapa pemeriksaan berguna sebagai informasi tetapi bukan sebagai penghalang. Misalnya, Anda mungkin menjalankan pengujian kinerja dan mencatat hasilnya, tetapi tidak memblokir pipeline jika hasilnya sedikit lebih buruk dari yang diharapkan. Itu adalah penilaian yang harus dibuat oleh manusia.

Mereka Bekerja Sama, Bukan Berlawanan

Gate otomatis dan persetujuan manual bukanlah pendekatan yang bersaing. Mereka saling melengkapi. Pipeline menangani pemeriksaan teknis yang berulang, konsisten. Manusia menangani keputusan kontekstual, situasional, dan berbasis penilaian.

Pipeline yang baik menggunakan gate otomatis untuk menyaring masalah yang jelas sejak awal. Pada saat perubahan mencapai langkah persetujuan manual, perubahan tersebut telah melewati serangkaian pemeriksaan kualitas. Peninjau manusia tidak perlu khawatir tentang apakah kode dikompilasi atau pengujian lolos. Mereka dapat fokus pada pertanyaan yang lebih sulit: apakah ini hal yang benar untuk dilakukan, pada saat ini, dalam konteks ini?

Daftar Periksa Praktis

Saat mendesain titik pemeriksaan pipeline Anda, ajukan pertanyaan-pertanyaan ini:

  • Dapatkah pemeriksaan ini didefinisikan sepenuhnya dalam kode? Jika ya, otomatiskan.
  • Apakah pemeriksaan ini memerlukan pengetahuan tentang keadaan produksi saat ini? Jika ya, pertahankan secara manual.
  • Apakah pemeriksaan ini perlu mempertimbangkan waktu bisnis atau koordinasi tim? Jika ya, pertahankan secara manual.
  • Apakah pemeriksaan ini murni teknis dan berulang? Jika ya, otomatiskan.
  • Apakah mengotomatiskan pemeriksaan ini akan menghilangkan pengawasan manusia yang berharga? Jika ya, pertahankan secara manual.

Kesimpulan

Gate otomatis memberi Anda kecepatan dan konsistensi. Persetujuan manual memberi Anda konteks dan penilaian. Tidak ada yang menggantikan yang lain. Bangun pipeline Anda untuk menggunakan keduanya, dan Anda akan mendapatkan sistem yang bergerak cepat tetapi tidak melewatkan pertanyaan-pertanyaan sulit.