- Di tim operasional, prosedur manual (toil) yang sulit dihilangkan sepenuhnya seperti perubahan infrastruktur atau provisioning akun masih tetap ada, dan semakin besar perusahaan, semakin banyak langkah serta pengecualiannya
- Setiap langkah tampak bisa diotomatisasi, tetapi jika hanya sebagian yang dijadikan skrip, jumlah alat satu tujuan akan bertambah dan pengguna tetap harus mengikuti dokumen prosedur yang panjang
- Skrip do-nothing tidak menjalankan pekerjaan nyata secara otomatis; alih-alih, skrip ini membungkus setiap langkah prosedur dalam fungsi lalu memberi instruksi kepada pengguna selangkah demi selangkah
- Pengguna jadi lebih kecil kemungkinannya kehilangan posisi saat ini atau melewati langkah, dan pengembang nantinya lebih mudah mengubah teks panduan pada langkah tertentu menjadi kode otomatisasi nyata
- Meskipun jumlah pekerjaan manual saat ini tidak langsung berkurang, pendekatan ini menurunkan biaya awal untuk memulai otomatisasi, sehingga toil dapat dihapus secara bertahap seiring waktu
Saat prosedur manual menjadi beban berat
- Setiap tim operasional masih memiliki prosedur manual yang belum berhasil diotomatisasi, dan toil sulit dihilangkan sepenuhnya
- Di perusahaan yang sedang tumbuh, prosedur seperti perubahan infrastruktur atau provisioning akun pengguna mudah menjadi pusat toil yang besar
- Prosedur provisioning akun pengguna dapat melalui beberapa langkah seperti berikut
- Membuat pasangan kunci SSH pengguna
- Commit kunci publik ke Git lalu push ke master
- Menunggu pekerjaan build selesai
- Memeriksa alamat email pengguna di direktori karyawan
- Mengirimkan kunci privat kepada pengguna melalui 1Password
- Di lingkungan nyata, prosedur ini bisa bertambah hingga 20 langkah, atau Anda mungkin harus terus melacak percabangan dan kasus khusus selama proses berjalan
- Pekerjaan seperti ini menuntut banyak konsentrasi, tetapi lebih mirip mencentang satu kotak lagi daripada menyelesaikan masalah yang menarik, sehingga menjadi slog
Celah yang ditinggalkan otomatisasi parsial
- Slog tampak sebagai target yang bagus untuk diotomatisasi
- Mudah membayangkan cara mengotomatisasi setiap langkah
- Komputer dapat menjalankan instruksi lebih cepat dan lebih akurat daripada manusia
- Kemungkinan terjadinya practical drift juga lebih rendah
- Masalahnya, otomatisasi slog sering terasa seperti semua atau tidak sama sekali
- Anda bisa membuat skrip yang hanya menangani 2 atau 5 langkah, tetapi kerepotan keseluruhan prosedur tetap tidak banyak berkurang
- Ketika skrip satu tujuan semakin banyak, konvensi dan perilaku yang diharapkan dari tiap alat menjadi berbeda-beda, dan pengguna tetap harus mengikuti dokumentasi untuk banyak langkah
Cara kerja skrip do-nothing
- Hampir semua slog dapat diubah menjadi skrip do-nothing
- Intinya adalah memasukkan instruksi slog ke dalam kode, lalu mengenkapsulasi setiap langkah sebagai satu fungsi
- Alur skrip contoh adalah sebagai berikut
CreateSSHKeypairStepmenampilkan perintahssh-keygendan menunggu sampai pengguna menekan EnterGitCommitStepmenyalin kunci publik ke repositori Git lalu mengarahkan pengguna untuk menjalankangit commit,git pushWaitForBuildStepmengarahkan pengguna untuk menunggu hingga selesai pada URL pekerjaan buildRetrieveUserEmailStepmencari alamat email di direktori lalu menerimanya sebagai input dan menyimpannya kecontext["email"]SendPrivateKeyStepmengarahkan pengguna untuk membuat dokumen kunci privat di 1Password dan membagikannya kepada pengguna dengan email tersebut
- Skrip ini tidak benar-benar menjalankan langkah apa pun dalam prosedur; skrip hanya memberi instruksi kepada pengguna satu langkah demi satu langkah lalu menunggu penyelesaian manual
Jalur menuju otomatisasi
- Sekilas, skrip do-nothing mungkin terlihat seperti membuat dokumentasi makin sulit dibaca, tetapi sebenarnya justru membantu menjaga alur kerja dengan lebih aman
- Pengguna menjadi lebih kecil kemungkinannya kehilangan jejak progres atau melewati langkah
- Lebih mudah mempertahankan fokus dan menyelesaikan slog sampai akhir
- Karena setiap langkah dipisahkan sebagai fungsi, teks pada langkah tertentu dapat diganti dengan kode tindakan nyata
- Seiring waktu, akan muncul pustaka langkah yang dapat digunakan ulang, dan pekerjaan otomatisasi berikutnya menjadi lebih efisien
- Skrip do-nothing itu sendiri tidak mengurangi jumlah pekerjaan manual tim
- Nilai utamanya adalah menciptakan kondisi yang memudahkan memulai otomatisasi, sehingga tim dapat menghapus toil seiring waktu di atas fondasi itu
1 komentar
Pendapat di Hacker News
Saya sangat menyukai pendekatan ini
Secara keseluruhan, ini adalah cara lain untuk mendefinisikan antarmuka di sekitar sebuah proses. Proses itu bisa manual atau bisa diautomasi, tetapi antarmukanya dapat tetap sama. Karena itu, pendekatan ini cukup kuat saat mengautomasi langkah-langkahnya
Terapkan saja dengan cara yang sama seperti pada sistem lain
Dulu saya pernah mengisi Google Sheets secara manual lalu mengautomasi dengan skrip, dan juga pernah membuatnya otomatis mengambil dan memproses saat tiket Jira dibuat. Anda bisa mulai lebih cepat, mengautomasi hanya bagian yang paling menjengkelkan, dan tidak harus mengautomasi semuanya
Efek samping dari skrip yang tidak melakukan apa-apa adalah kemungkinan besar ia benar-benar dipakai dibanding dokumentasi, sehingga bisa lebih sering tetap mutakhir
Saya setuju dengan daftar skrip untuk mengautomasi pekerjaan umum. Namun begitu skrip-skrip itu mulai dipanggil dari layanan operasional, terciptalah utang teknis besar bagi orang malang yang harus mengurai jejaring spageti itu
Lebih jauh lagi, karena proses yang berpusat pada manusia telah mengodekan sistem, perubahan yang menguntungkan sistem perangkat lunak—misalnya memecah sistem menjadi komponen—menjadi tidak mungkin. Pada akhirnya, ekspansi bertahap menjadi cara untuk memasukkan lebih banyak hal ke dalam proses, dan itu menjadi siklus proliferasi mandiri yang terus menempel pada monolit skrip
Selama menjalankan 3 dan 4, proses digunakan berulang-ulang oleh sebanyak mungkin orang, lalu proses disesuaikan dengan penyalahgunaan yang terlihat di lapangan nyata
4) automasi prosesnya
Semua orang setuju dengan 1 dan 2, dan kebanyakan pada akhirnya juga ikut ke 4, tetapi jika melakukan 3, makin banyak orang yang meminta dan memahami 4
Namun batasan pendekatan ini adalah: jika awal atau akhir proses bisa diautomasi, itu masih baik-baik saja; tetapi jika ada dua titik automasi yang terpisah seperti pulau di tengah proses, itu tidak lebih baik daripada alat command-line dengan prompt
Cukup jelaskan apa yang perlu dilakukan, lalu sediakan boilerplate atau contoh serta executable yang diparameterisasi
Akan keren jika Notebooks dipakai sebagai sistem dokumentasi secara de facto. Namun, ia terlalu berat untuk dijadikan lapisan di atas cloud SaaS seperti Confluence, dan dalam bentuknya sekarang juga menyisakan terlalu banyak celah untuk masalah seperti eskalasi hak akses
Pendekatan ini mengubah halaman panduan Confluence menjadi walkthrough yang setengah interaktif. Ini sisi yang sadar
Sisi lainnya adalah automasi pengujian. Pada awalnya dimulai dengan tumpukan XPath yang overfit dan langkah-langkah yang tidak terdokumentasi. Setiap kali aplikasi berubah, langkah-langkah itu ditemukan kembali. Ini sisi yang tidak sadar
Semoga kita bisa mencapai puncak dan menjalankannya dengan cepat, sambil tetap tahu bagaimana kita sampai ke sana dan mengapa menjadi seperti itu
Cukup minta konfirmasi kepada pengguna seperti
Execute command (y/N)?Saya benar-benar tidak suka menyalin dan menempel dari satu terminal ke terminal lain. Itu juga sangat menguras konsentrasi
Cukup tanyakan kepada pengguna hanya untuk pekerjaan manual yang belum berupa perintah:
Look up the e-mail address for foo. Paste it here:atauPut that shit in 1Password: Are you done (y/N)?Pendekatan yang menarik
Namun pekerjaan yang dijadikan contoh hanya menunjukkan betapa tidak amannya cara perusahaan itu menerbitkan kunci SSH. Dalam praktiknya, pengguna seharusnya membuat private key sendiri, lalu hanya menyerahkan public key kepada administrator sistem untuk diberi hak akses. Pada titik mana pun administrator sistem tidak boleh memiliki salinan private key, bahkan sementara sekalipun. Jadi langkah 1Password itu sendiri seharusnya tidak diperlukan
Sebagai catatan, saya adalah pembuat github-keygen, alat yang mengautomasi pembuatan kunci SSH khusus untuk akses GitHub serta pengaturan SSH dalam konteks tersebut
https://github.com/dolmen/github-keygen
pengguna harus membuat private key sendiri dan hanya menyerahkan public key kepada administrator sistemselalu menyebalkan untuk diimplementasikanKami beralih dari SSH ke autentikasi berbasis sertifikat, dan tidak lagi memindahkan public key ke sana-sini. Seluruh prosesnya menjadi benar-benar lebih sederhana
Saya baru akhirnya mencoba pendekatan ini sekitar setahun setelah tulisan ini pertama kali terbit
Karena bug di toolchain kami, runbook untuk hotfix kira-kira dua kali lebih rumit daripada proses rilis biasa
Meski tidak mendapat apresiasi sebesar itu, sesuatu yang dulu hanya dipakai kira-kira sekali tiap 10 minggu untuk isu sev 1 atau pekerjaan epic tahap akhir menjadi dipakai rata-rata sekali seminggu, dan pada minggu tertentu sampai 3 kali. Karena tidak semuanya harus dijadikan feature toggle, kami bisa menggali utang teknis jauh lebih dalam
Kalau perusahaan Anda kecil sehingga mudah mereplikasi data produksi ke lingkungan pra-produksi, hasil seperti ini mungkin tidak terlihat. Namun endpoint yang kami ajak berkomunikasi ada lebih dari 150, dan rata-rata sekitar 3 per layanan. Dataset-nya sangat banyak, dan sebagian dikumpulkan dengan cara yang mirip Kafka sebelum Kafka ada
Hanya ada satu orang yang mencoba mereplikasi data produksi, dan orang itu pun kekurangan waktu serta energi sehingga hanya bisa melakukannya sekali atau dua kali setahun. Laju itu jauh lebih lambat daripada laju perubahan pelanggan dan fitur. Pada akhirnya kami harus mengutak-atik proses deployment blue-green dan jmeter untuk mencari tahu apakah kami sudah mendekati, serta bagaimana mengukur keberhasilan/kegagalan sebelum live
Pada akhirnya yang menghambat orang-orang adalah proses build kecil-kecil yang rentan salah, dan baru terurai setelah saya mengotomatiskan setengahnya
Belakangan, seiring penggunaan meningkat, saya mencari semua URL pada langkah manual dan memasukkannya ke lookup table di dalam tool, lalu juga menampilkannya dalam proses verifikasi umum untuk persetujuan rilis. Berkat itu, koordinator bisa bekerja sedikit lebih cepat dan dengan stres lebih rendah. Karena proses itu sangat menjengkelkan, tiga tim bergiliran menanganinya untuk berbagi beban
Apakah ungkapan “menurunkan energi aktivasi otomatisasi tugas” pada akhirnya berarti skrip yang tidak melakukan apa-apa nanti akan memiliki langkah yang benar-benar mengotomatiskan sesuatu?
Jika dilihat sebagai placeholder untuk otomatisasi masa depan, ini terasa seperti keseimbangan yang tepat antara otomatisasi dan efisiensi. Anda bisa melakukan percobaan pertama tanpa investasi berlebihan, dan menyisakan buah yang mudah dipetik nanti ketika upayanya menjadi lebih jelas bernilai
Karena setiap langkah prosedur sekarang dienkapsulasi sebagai fungsi, teks dari langkah tertentu bisa diganti dengan kode yang benar-benar menjalankan tindakan secara otomatis
class Foo(object): def run(self, context): ...Objek yang hanya punya satu method eksekusi sudah bawaan di Python. Itu adalah fungsi
def foo(context): ...Dalam pendekatan fungsi, jika butuh fungsi baru, Anda akan menambahkannya di level global. Kalau cuma satu-dua, itu sepenuhnya baik-baik saja, tetapi kalau makin banyak, akan ada banyak fungsi berjajar di level yang sama dan dependensi di antaranya tidak lagi jelas
Salah satunya membahas contoh-contoh menyederhanakan kode yang diabstraksikan secara tidak perlu
Bagus, tetapi tidak bisa dihentikan
Akan bagus kalau semua langkah ditampilkan lebih dulu, lalu tiap item dicentang seiring progres. Kadang lebih baik benar-benar bersiap dengan sudut pandang yang lebih luas
Ringkasannya juga bisa ditinggalkan sebagai log di file
Ada begitu banyak hal yang bisa diperbaiki sehingga, justru solusi paling sederhana mungkin yang terbaik
Namun skrip shell yang tidak melakukan apa-apa terlalu mudah untuk mulai dibuat sehingga sulit untuk tidak menyelesaikannya. Upaya itu mungkin lebih baik dipakai untuk mengotomatiskan satu langkah. Anda bisa terjebak di rawa yang menarik tetapi tidak terlalu produktif, seperti memilih library TUI mana yang dipakai atau bagaimana menyusun strukturnya
Tiap langkah adalah rule bernama
*.done, dan setelah selesai akan membuat file.done. Anda bisa menghentikannya kapan saja, mengubah skrip untuk memperbaiki sesuatu, lalu melanjutkan denganmakeNamun menulis Makefile itu benar-benar menyakitkan. Apakah ada solusi yang lebih baik?
./do-the-thing.sh 2025, lalu buat direktori 2025 untuk menyimpan state sudah sampai manaSaat langkah pertama disetujui, Anda bisa melakukan
touchpada file2025/first-step. Jika skrip mati atau dihentikan lalu dijalankan lagi, skrip memeriksa file itu dan melewati langkah pertamaKetika ada sesuatu yang berubah sehingga otomatisasi tidak berjalan, bagus kalau Anda bisa keluar tanpa kehilangan state, memperbaiki skrip, lalu menjalankannya lagi
Biasanya saya membuat skrip hanya memberi tahu satu langkah manual berikutnya lalu keluar. Dengan begitu terminal bisa dipakai untuk hal lain. Skrip bisa dijalankan ulang dengan mudah lewat riwayat perintah
Ada juga diskusi-diskusi sebelumnya. Komentarnya banyak
https://news.ycombinator.com/item?id=29083367 - 3 tahun lalu, 230 komentar
https://news.ycombinator.com/item?id=20495739 - 6 tahun lalu, 124 komentar
Saya tidak bisa melebih-lebihkan betapa saya menyukai pendekatan ini
Saya berhasil menerapkannya di beberapa proyek. Contoh favorit saya adalah robot bedah senilai 30 juta dolar yang gagal dalam pengujian lab karena “faktor manusia”
Saya berada di bidang lain, yaitu praktik hukum, tetapi ingin memikirkan bagaimana pendekatan ini bisa diterapkan di perusahaan kami
Saya suka pendekatan ini. Bahkan pada sistem berbasis bahasa pemrograman dengan tingkat kompleksitas tertentu, saya sudah suka melakukan hal serupa. Di ranah pemrograman fungsional, tampaknya ini disebut holes
Error
not implementedpada interface juga mengikuti logika yang mirip, tetapi menurut saya ada nilai yang cukup besar dalam menulis hal-hal sepele yang menghasilkan output valid meski tidak bermakna untuk masing-masing dari beberapa bagian yang saling bergantung. Dengan begitu, proses membuat bagian-bagian itu menjadi lebih cepat, dan kemungkinan untuk menguji serta membuatnya satu per satu jauh lebih besar. Kebutuhan untuk menulis banyak bagian sekaligus sebelum mulai menguji jadi berkurangSeperti kasus penggunaan yang dibahas dalam tulisan, dalam konteks skrip kadang validitas pada level tipe seperti ini sulit menjadi penting. Sebab efek dari command line, dari sudut pandang fungsional, sebagian besarnya adalah efek samping. Namun karena prosesnya berjalan secara berurutan, dampaknya jauh lebih kecil, dan berkat prompt yang menunggu, kita bisa mempertahankan urutan kerja dengan biaya kecil sambil tetap menyimpan langkah manual yang bagaimanapun harus dilakukan meski tanpa skrip
Scaffolding memang tidak sempurna, tetapi pada dasarnya berguna
Secara teori bagus, tetapi dalam praktik sepertinya sulit
Jika tim operasi melakukan pekerjaan yang sama berulang kali, lalu melihat bahwa skrip yang tidak melakukan apa-apa memang benar-benar tidak melakukan apa-apa, begitu mereka merasa sudah hafal langkahnya, atau merasa melakukannya secara manual lebih cepat atau lebih menarik, skrip itu akan segera tidak dipakai
Saya sudah banyak menulis otomasi dan dokumentasi untuk tim operasi, tetapi membuat orang menggunakannya dan terus menggunakannya selalu menjadi masalah. Perubahan dokumentasi pun perlu diumumkan. Begitu orang merasa sudah bisa melakukan sesuatu, mereka cepat berhenti membaca dokumentasi
Di dunia yang sempurna, pendekatan ini sangat masuk akal, dan untuk pekerjaan pribadi saya sendiri mungkin akan memakainya. Namun kenyataannya hampir tidak pernah sempurna. Kalau saya, saya mungkin hanya akan memakai cara ini ketika 90% sudah terotomasi dan tinggal 1 langkah yang belum bisa diselesaikan. Bahkan saat itu pun, sebagian tim operasi bisa saja melewati langkah manual tersebut dan menganggap semuanya adalah sihir yang sudah terotomasi