- Berbagi contoh penerapan konsep DevOps, staff engineering, dan platform engineering secara efektif di lingkungan startup
- Pembicara Chad McElligott adalah Senior Staff Engineer di Smartrr, perusahaan penyedia layanan langganan dan loyalitas berbasis Shopify
- Mengusulkan metodologi rekayasa yang disesuaikan dengan budaya dan kebutuhan khas startup
[Konsep inti]
DevOps
- Definisi DevOps berbeda-beda bagi tiap orang; bagi sebagian orang ini adalah jabatan, bagi yang lain ini adalah cara bekerja
- Konsep "DevOps as No Ops" membuat software engineer menangani sendiri seluruh pekerjaan terkait Ops
- DevOps adalah pola pikir kolaboratif, otomatisasi pekerjaan berulang dan manual ( toil ), serta pemanfaatan alat modern untuk menghadirkan nilai kepada pelanggan dengan cepat
- Bukan hanya elemen teknis seperti penggunaan cloud, infrastruktur sebagai kode, dan pembangunan pipeline CI/CD, tetapi juga meruntuhkan hambatan komunikasi dan kolaborasi untuk mencapai hasil yang lebih baik
Platform Engineering
- Platform Engineering adalah pendekatan teknis untuk mengurangi beban kognitif developer
- Tujuannya adalah meningkatkan kecepatan pengembangan produk sekaligus stabilitas sistem, dengan menyediakan komponen dasar yang mendukung aktivitas developer
- Semakin banyak perusahaan besar membangun tim platform engineering untuk meningkatkan efisiensi dan memperbaiki pengalaman developer
- Menjadi populer melalui buku Team Topologies karya Manuel Pais dan Matthew Skelton, dan contoh penguatan kapabilitas engineering dapat ditemukan di berbagai media
Staff Engineering
- Staff Engineering bukanlah pola pikir atau keterampilan tertentu, melainkan peran yang diemban software engineer dalam organisasi
- Ini adalah tahap karier setelah Senior Software Engineer, dan juga dapat dijelaskan sebagai servant leadership dalam software engineering
- Engineer Staff+ memperluas tanggung jawabnya ke seluruh organisasi, bukan hanya pekerjaan individual, dan bekerja sama dengan manajer atau VP untuk memberi eksekusi nyata serta perspektif
- Dalam buku Staff Engineer, Will Larson menjelaskan peran Staff melalui empat arketipe: Architect, Right Hand, Tech Lead, dan Fixer
[Budaya startup]
- Startup yang didanai modal ventura sering kali memiliki pengeluaran yang melebihi pendapatan demi pertumbuhan
- Modal yang diperoleh dari investasi digunakan sebagai "runway" untuk mengejar pertumbuhan cepat, dan pertumbuhan serta profitabilitas harus dicapai sebelum runway habis
- Lingkungan seperti ini membentuk dua karakteristik budaya utama
- Tidak ada waktu untuk dibuang
- Membuang waktu sangat fatal di startup
- Tim pengembang harus fokus pada tujuan strategis organisasi dan mengeksekusi dalam batas runway
- Setiap anggota tim perlu sering memeriksa apakah aktivitasnya selaras dengan tujuan, dan menyesuaikannya bila perlu
- Bahkan jika eksperimen gagal, selama ada struktur untuk belajar dan pelajaran yang diinginkan berhasil diperoleh, itu bukan pemborosan
- Semua orang menjalankan banyak peran
- Di organisasi kecil, ada banyak hal yang harus dikerjakan tetapi kekurangan orang untuk melakukannya
- Misalnya, developer frontend dapat merangkap sebagai product designer, technical writer, product manager, quality assurance, hingga penanggung jawab integrasi pihak ketiga
- Jika muncul ide baru untuk meningkatkan pengalaman pelanggan, orang yang mengusulkannya bisa saja ikut bertanggung jawab untuk membuat prototipe atau mewujudkannya secara langsung
- Karakteristik budaya ini menentukan kapabilitas yang dibutuhkan kelompok pengembangan produk, khususnya pemimpin software engineering
- Ini juga memberi petunjuk tentang bagaimana DevOps, Platform Engineering, dan Staff Engineering harus beradaptasi dengan lingkungan startup
[Menerapkan prinsip-prinsip engineering (tenet) saya pada budaya startup]
DevOps di startup
- Di startup, proses mudah diubah.
- Karena jumlah orang sedikit, tidak ada hambatan besar untuk menerapkan cara kerja baru
- Menyesuaikan proses berdasarkan alat akan menghasilkan hasil yang optimal
- Jika mempertahankan proses yang kaku, waktu akan terbuang untuk mengustomisasi alat atau mengembangkan software tambahan
- Sebisa mungkin hindari alat kustom
- Sebaiknya memanfaatkan infrastruktur serverless, alat SaaS, pustaka open source, dan sejenisnya
- Ikuti arus umum teknologi, dan jangan mengustomisasi teknologi jika itu tidak memberi keunggulan kompetitif yang benar-benar membedakan
- Referensi: Martin Fowler, Utility vs Strategic Dichotomy
- Pilih "teknologi yang membosankan"
- Jangan mempertaruhkan risiko besar pada solusi yang belum familier bagi tim atau yang komunitasnya minim
- Saat masalah muncul, pilih teknologi yang memudahkan pencarian solusi secara online
- Penjelasan lebih rinci tentang ide ini dapat dilihat dalam presentasi di boringtechnology.club
Platform Engineering di startup
- Poin yang disebutkan Rebecca Murphey dalam podcast Engineering Unblocked:
- "Developer experience di perusahaan adalah sebuah produk, baik dirancang secara sadar maupun tidak"
- Bahkan pada skala startup, tetap dibutuhkan monitoring, deployment, pelacakan error, pemeriksaan log, dan pergantian feature flag
- Pertanyaan pentingnya adalah: "Apakah pekerjaan-pekerjaan ini menyakitkan?"
- Platform Engineering adalah peran paruh waktu di startup
- Pada tahap awal mungkin dibutuhkan lingkungan pengujian yang terintegrasi, tetapi kemudian bisa turun prioritas
- Peran platform engineering dijalankan hanya saat memang diperlukan
- Tidak ada kelonggaran untuk menjalankan proyek platform jangka panjang
- Sebagai gantinya, elemen yang bernilai harus diwujudkan melalui unit kerja kecil
- Penting untuk membagikan gambaran besar dan visi kepada tim, sambil membantu mereka memahami bagaimana potongan-potongan kecil itu saling terhubung
- Pekerjaan platform di startup adalah proses merintis produktivitas dan pendekatan baru
- Ini bukan sekadar berpindah dari software lama ke alat modern, melainkan kebanyakan adalah membangun sesuatu yang sebelumnya belum ada sama sekali
- Yang penting bukan hanya menentukan apa yang bisa dilakukan, tetapi apa yang harus dilakukan
- Harus fokus pada pekerjaan yang menyelesaikan masalah organisasi saat ini atau masalah yang akan segera datang
- Pekerjaan yang dibutuhkan harus diidentifikasi melalui pengalaman praktik, percakapan dengan engineer, umpan balik retrospektif, analisis metrik SDLC (siklus hidup pengembangan perangkat lunak), dan sebagainya
- Kadang lebih baik menunda pekerjaan platform dan fokus pada kebutuhan lain
- Kuncinya adalah pendekatan yang fleksibel
Staff Engineering di startup
- Peran Staff Engineer cocok dengan lingkungan startup
- Keahlian teknis yang mendalam, kecenderungan untuk mengejar pengaruh yang luas, dan sikap siap turun tangan di mana pun untuk menyelesaikan masalah bisnis sangat sesuai dengan startup
- Di organisasi besar ada ungkapan, "tahu di mana technical debt terkubur"
- Staff Engineer mencari orang yang memiliki pengetahuan semacam itu, merapikannya, lalu menarik keputusan untuk melangkah maju
- Di startup, technical debt dan masalah terlihat dengan jelas
- Staff Engineer dapat memberi dampak besar dengan menata kekacauan ini dan membangun solusi yang membantu organisasi dalam jangka panjang
- Di startup, Staff Engineer tidak bisa bertahan dalam satu arketipe saja
- Karena ukuran organisasi kecil, mereka harus menjalankan berbagai aktivitas termasuk eksekusi langsung
- Selain merancang arsitektur, memimpin proyek, dan menjalankan pekerjaan taktis, mereka juga harus sendiri menggali ide perbaikan dan mengeksekusinya
- Fleksibilitas dan rasa tanggung jawab yang proaktif adalah karakteristik penting bagi engineer Staff+ di startup
- Salah satu peran penting engineer Staff+ adalah mentoring dan sponsorship
- Ini memberikan dukungan dan arah yang penting, terutama bagi talenta junior di startup
- Melalui dukungan ini, Staff Engineer mendorong pertumbuhan tim dan memperkuat kapabilitas organisasi
[Menerapkan modern staff engineering di startup]
Cerita 1 dari 2 - "Improving DevEx by Removing a Merge Freeze"
Situasi masalah
- Proses QA yang ada:
- Selama 2-3 hari sebelum rilis, diberlakukan "merge freeze" dan tim QA menjalankan pengujian regresi manual
- Bug yang ditemukan langsung diperbaiki dan di-merge ke branch main
- Developer membuat patch baru, tetapi harus menunda merge request hingga setelah rilis
- Kekurangan:
- Pengujian regresi manual lambat dan tidak dapat diprediksi
- Penundaan merge meningkatkan frekuensi terjadinya merge conflict
- Produktivitas dan kolaborasi developer menurun
Solusi
- Mengintegrasikan kode infrastruktur ke Monorepo
- Proyek Terraform diintegrasikan ke repositori yang sama dengan kode aplikasi
- Dihubungkan ke alat linting otomatis dan manajemen dependensi agar developer lebih mudah menangani infrastruktur
- Mengelola semua environment dengan Terraform
- Bukan hanya environment baru, tetapi juga environment staging dan production yang sudah ada dikelola dengan Terraform
- Menjaga konsistensi antar-environment dengan menerapkan variabel berbeda pada definisi infrastruktur yang sama
- Menyederhanakan proses CI/CD
- Template GitLab Auto DevOps yang lama menjadi kompleks karena terlalu banyak kustomisasi
- Auto DevOps dihapus dan file
.gitlab-ci.yml baru didefinisikan dengan jelas
- Sebagian besar perintah dipindahkan ke Makefile agar juga bisa dijalankan secara manual
- Meningkatkan pengelolaan secrets
- Secret aplikasi dipindahkan ke Google Cloud Secrets Manager untuk mengurangi keterikatan dengan GitLab
- Skrip deployment dimodifikasi agar memperbarui Kubernetes ConfigMap secara otomatis
- Pekerjaan yang dikecualikan dari cakupan
- Aplikasi berjalan di Kubernetes dengan struktur monolith
- Ini dipertahankan karena perubahan di area tersebut dapat menimbulkan keterlambatan dan risiko
- Pipeline otomatisasi Terraform tidak dibangun
- Karena perubahan infrastruktur relatif jarang, proses manual tetap dipertahankan
- Pendekatan akses secret native Kubernetes juga ditunda
Hasil dan pencapaian
- Environment pengujian baru berhasil di-deploy, dan tim QA dapat menjalankan pengujian regresi secara mandiri
- Dengan merge freeze dihapus, developer bebas me-merge perubahan ke branch main
- Proses rilis menjadi lebih sederhana dan kecepatan seluruh tim meningkat
Prinsip yang diterapkan
- Prinsip Staff Engineering
- Memimpin proyek sambil berkolaborasi dengan berbagai tim
- Menjalankan peran "Tech Lead" dan membawa proyek sampai selesai
- Meningkatkan pemahaman dan aksesibilitas tim lewat perbaikan CI/CD dan infrastruktur
- Prinsip Platform Engineering
- Memperluas proyek DevOps menjadi proyek platform
- Mengelola seluruh infrastruktur sebagai kode untuk memastikan konsistensi antar-environment
- Menyesuaikan cakupan proyek melalui trade-off yang realistis
- Prinsip DevOps
- Mengelola infrastruktur sebagai kode untuk mengoperasikan infrastruktur cloud secara konsisten
- Memperbaiki proses rilis dan meningkatkan kecepatan pengembangan dengan alat baru
- Mengadopsi format dokumen RFC(Request For Comment) untuk memperkuat inklusivitas dalam proses pengambilan keputusan
Kesimpulan
- Tim QA kini dapat menjalankan pengujian otomatis di environment yang lebih stabil
- Developer kini dapat terus mengembangkan produk tanpa merge freeze, dan kolaborasi pun menguat
- Produktivitas organisasi meningkat melalui tooling dan proses yang lebih baik
- Ke depannya, ada keinginan untuk menambahkan pekerjaan seperti membangun environment preview atau mengotomatiskan pengujian regresi
Cerita 2 dari 2 - "Iterating Towards a Productive Engineering Process"
Situasi masalah
- Proses yang ada:
- Semua anggota tim bekerja di satu board dan membagikan progres setiap hari
- Banyak orang tidak fokus dan berada dalam keadaan "checkout" saat bukan giliran mereka
- Tanggung jawab pengembangan fitur tersebar, sehingga product manager sering memegang tanggung jawab akhir
- Kurangnya pemahaman yang jelas tentang arsitektur teknis
- Tujuan:
- Melakukan berbagai eksperimen untuk membangun kolaborasi dan proses pengembangan software yang lebih baik
- Eksperimen 1: Short-lived Feature Teams
- Tujuan: memberi engineer rasa kepemilikan atas seluruh lifecycle pengembangan fitur
- Metode:
- Menunjuk seorang pemimpin untuk setiap fitur, lalu membentuk tim yang terdiri dari backend, frontend, QA, dan lainnya
- Hasil:
- Rasa tanggung jawab anggota tim membaik, tetapi tidak semua orang cocok atau ingin menjalankan peran pemimpin
- Setelah itu beralih ke "model tim tetap" dengan membentuk "Squads", dan tiap tim menjalankan perencanaan serta retrospektifnya sendiri
- Eksperimen 2: Epic Kickoff Documents
- Tujuan: memperjelas requirement dan mencapai kesepakatan tim tentang cakupan serta pendekatan proyek
- Metode:
- Hasil:
- Komunikasi tim membaik, dan kolaborasi sejak awal proyek menjadi lebih baik
- Anggota tim menilai meeting ini sebagai waktu yang berharga
- Eksperimen 3: Group Code Review
- Tujuan: mempersingkat waktu code review, mengaktifkan diskusi kode, dan berbagi pengetahuan teknis antar-engineer
- Metode:
- Mengadakan sesi code review selama 1 jam dua kali seminggu di Slack Huddle
- Developer membagikan layar sambil menjelaskan PR, lalu peserta memberikan feedback
- Hasil:
- Waktu yang dibutuhkan untuk code review berkurang drastis, dan kondisi Inbox 0 dapat dipertahankan
- Diskusi tentang kode membentuk budaya saling belajar dan saling menghormati antar-developer
- Selain code review, manfaat pair programming juga mulai diperkenalkan ke tim
Prinsip yang diterapkan
- Prinsip Staff Engineering
- Memimpin perbaikan proses saat tidak ada engineering manager
- Memperkenalkan budaya perbaikan berkelanjutan ke dalam tim dan memperkuat kolaborasi mandiri melalui proses agile
- Membantu tim mendobrak proses yang mandek dan menemukan cara yang lebih baik
- Prinsip Platform Engineering
- Menganggap bukan hanya alat, tetapi juga proses sebagai bagian dari platform
- Proses yang tidak efisien menghambat produktivitas tim, sehingga memperbaikinya sangat penting
- Perubahan proses untuk menghilangkan pemborosan bisa berdampak sebesar perbaikan tooling
- Prinsip DevOps
- Prinsip CALMS: Collaboration, Automation, Lean, Measurement, Sharing
- Melalui proses Lean, pemborosan dihilangkan dan nilai dapat dikirim lebih cepat
- Mendidik tim agar terus melakukan perbaikan melalui proses agile
Kesimpulan
- Produktivitas dan kolaborasi meningkat signifikan melalui perbaikan proses tim secara eksperimental
- Dengan perbaikan berbiaya rendah, berdampak tinggi, pengalaman pengembangan seluruh tim membaik
- Sangat dianjurkan untuk meninjau proses sendiri secara kritis dan mencari ruang untuk perbaikan
[Penutup]
- Saat bekerja di lingkungan startup, seseorang dapat mengerahkan keahlian dan semangat sepenuhnya dalam proses memecahkan berbagai masalah dan mewujudkan solusi
- Karena ada keterbatasan waktu, ini menjadi peluang yang baik untuk menumbuhkan pendekatan pragmatis, serta dapat memberikan dampak besar pada tahap awal perusahaan
- Dengan menerapkan pendekatan rekayasa perangkat lunak modern, seseorang dapat meletakkan fondasi bagi kesuksesan perusahaan
-
Staff Engineering dan startup
- Staff Engineer memerlukan pengalaman yang mencakup keluasan dan kedalaman
- Startup memberi peluang bagi engineer Staff+ untuk memperluas pengetahuan teknis dan menjelajahi area baru
- Contoh: engineer backend dapat mempelajari teknologi seperti React atau BigQuery
-
Platform Engineering dan startup
- Platform Engineering di startup berbeda-beda tergantung skalanya
- Melalui komunikasi 1:1, kita dapat memahami pain point developer dan meningkatkan developer experience (DevEx) lewat proyek kecil
- Perlu membangun feedback loop yang cepat untuk meningkatkan proses pengembangan, serta membantu developer agar nantinya dapat menyelesaikan masalah sendiri
- Penting untuk memenuhi dasar-dasar siklus hidup pengembangan perangkat lunak (SDLC) dengan alat dan teknik standar industri
- Di startup, Platform Engineering bukan tugas khusus yang berdiri sendiri, melainkan pendekatan teknis yang diterapkan sesuai kebutuhan
- Perlu diingat bahwa "developer experience di perusahaan adalah sebuah produk", dan waktu harus dialokasikan untuk merancangnya
-
DevOps dan startup
- DevOps juga memainkan peran yang sangat penting di startup
- Intinya adalah menghadirkan nilai kepada pelanggan lebih cepat melalui budaya, proses, dan alat, sekaligus menciptakan lingkungan kerja yang lebih baik
- Meningkatkan efisiensi perusahaan dan membangun budaya kolaborasi melalui DevOps adalah proses yang sangat memuaskan
- Di startup, engineer yang memiliki semangat terhadap DevOps dapat memberi kontribusi besar lewat keterampilan dan pengalamannya
- Lingkungan startup penuh dengan tantangan baru dan peluang belajar, dan melalui hal ini engineer dapat berkembang lebih jauh serta menghasilkan pencapaian yang bermakna
3 komentar
Obituari untuk DevOps
Platform engineer yang menghasilkan lebih banyak uang daripada engineer DevOps
Apa itu engineer Staff?
Sepertinya ini mendefinisikan dengan baik peran engineering yang akan dibutuhkan startup ke depannya. Rasanya engineering yang sebelumnya dilakukan tanpa pembagian yang jelas kini telah dirapikan dengan baik. Saya juga merasa ini bisa membantu kita memahami secara lebih spesifik bidang engineering apa yang kita tangani dan apa yang ingin kita kuasai ke depan. Dengan begitu, startup pun bisa membangun engineering yang lebih tertata dan merekrut engineer yang dibutuhkan dengan lebih baik.