Monthly Work Report Workflow: From Commits to an Executive Report
On this page
Monthly Work Report Workflow: From Commits to an Executive Report adalah prosedur yang saya jalankan setiap akhir bulan untuk menyampaikan apa yang sudah saya kerjakan kepada pihak yang mempekerjakan saya. Titik awalnya riwayat commit di setiap repository yang saya sentuh bulan itu; hasilnya dokumen berformat yang bisa diikuti pembaca non-teknis, dengan bukti untuk setiap pekerjaan.
Halaman ini bukan tutorial, dan script maupun instruksi AI agent yang menjalankannya tidak dibagikan. Yang diceritakan adalah cara saya mengubah pekerjaan rutin menjadi rangkaian keputusan yang cukup diambil sekali: laporan dibangun dari apa, langkah mana dikerjakan AI agent, langkah mana tetap saya pegang, dan kenapa tiap langkah berada di tempatnya.
Sekilas
| Pemicu | Akhir bulan kerja |
|---|---|
| Frekuensi | Sebulan sekali |
| Masukan | Riwayat commit setiap repository yang saya kerjakan bulan itu, dan akses ke code host tempat repository itu disimpan |
| Hasil | Dokumen laporan berisi pembuka, tabel pekerjaan dengan bukti kode untuk tiap butirnya, dan penutup |
| Selesai bila | Setiap commit bulan itu tercatat, setiap gambar bukti lolos pemeriksaan, dan dokumen hasil render sudah saya tinjau |
Pekerjaan berulangnya
Pembaca laporan kerja bulanan tidak membaca kode. Mereka ingin tahu apa yang berubah, kenapa itu penting, dan apakah ada buktinya. Bahan yang saya punya justru ditulis untuk pembaca lain: pesan commit adalah catatan untuk git dan untuk diri saya kelak, singkat dan penuh nama yang tak bermakna di luar repository. Menerjemahkan yang satu ke yang lain dengan tangan, setiap bulan, lintas beberapa repository, lambat dan gampang keliru: ada pekerjaan yang terlupa, screenshot yang menunjuk baris yang salah, dokumen yang tampak benar di layar tapi berantakan begitu dicetak.
Karena itu laporan dibangun dari catatan, bukan dari ingatan. AI agent mengerjakan bagian membaca, mengelompokkan, menyusun draft, dan mengambil gambar; pemeriksaan di antara fase memastikan tak ada yang hilang atau dikarang di sepanjang jalan; dan dua pekerjaan yang hanya bisa saya lakukan — login ke code host dan menilai hasilnya — tetap di tangan saya.
Alurnya
- Temukan repository yang berubah bulan ini, lalu kumpulkan commit saya darinya.
- Kelompokkan commit menjadi butir pekerjaan, dan pastikan setiap commit tercatat.
- Susun draft untuk pembaca non-teknis.
- Ambil bukti kode untuk setiap butir.
- Tulis dokumennya, render, lalu tinjau.
Langkah dan keputusan di baliknya
Temukan repository bulan ini. Daftar repository dideteksi ulang setiap bulan, tidak disalin dari bulan lalu. Ada repository baru yang muncul, ada repository lama yang bulan ini tak tersentuh, dan daftar salinan akan melewatkan yang pertama atau melaporkan nihil untuk yang kedua.
Kumpulkan commit saya, lalu baca perubahannya. Dari tiap repository, agent hanya mengambil commit milik saya sendiri, tanpa merge commit, selama satu bulan kalender penuh. Merge commit disisihkan karena ia mengulang pekerjaan yang sudah tercatat di commit-commit yang disatukannya. Sesudah itu agent membaca perubahannya, bukan cuma pesannya, sebab pesan menyatakan niat saya, sedangkan perubahan memperlihatkan yang benar-benar terjadi; titik yang layak dijadikan bukti pun ditemukan di perubahan itu.
Kelompokkan commit menjadi butir pekerjaan. Commit yang melayani satu perubahan dikumpulkan di bawah satu tema, dengan judul yang menyebut apa yang dicapai dan cerita singkat tentang keadaan sebelum dan sesudahnya. Pembaca tak peduli berapa commit yang dibutuhkan; yang mereka pedulikan adalah apa yang jadi mungkin karenanya.
Pastikan setiap commit tercatat. Sebelum draft disusun, setiap commit hasil saringan wajib dirujuk tepat satu tema, dan tak boleh ada commit dari luar saringan. Pemeriksaan ini otomatis dan berfungsi sebagai gerbang: laporan yang diam-diam kehilangan pekerjaan seminggu, atau mengklaim pekerjaan yang bukan milik saya, gagal di sini, bukan di depan pembacanya.
Susun draft untuk pembaca non-teknis. Draft terdiri dari pembuka, tabel pekerjaan, dan penutup. Setiap baris tabel menjelaskan satu pekerjaan dari manfaatnya, dengan bahasa sehari-hari, dan ditutup satu kalimat terukur: berapa file dan baris yang tersentuh, dihitung dari repository dengan mengecualikan lock file, kode vendor, dan file hasil generate, yang akan menggelembungkan angka tanpa mencerminkan pekerjaan apa pun. Nama teknis hanya dipertahankan bila memang lazim dikenal pembaca; kode mentah dan nama variabel tidak.
Login ke code host sendiri. Repository-nya privat, jadi halamannya hanya bisa diambil gambarnya dari browser yang sudah login. Agent membuka browser dengan profil baru yang kosong, lalu saya login dengan tangan. Agent tak pernah menyalin cookie atau sesi tersimpan dari profil browser saya: meminjam sesi adalah jalan pintas yang tak saya izinkan untuk tool mana pun.
Ambil bukti kodenya. Setiap baris mendapat screenshot kode yang membuktikannya. Pengambilan dimulai di awal kode yang penting, misalnya function atau aturan yang berubah, tak pernah di baris pertama file yang isinya import. Semua gambar berproporsi lanskap yang sama, memperlihatkan nomor barisnya, dan menghindari tampilan folder yang mencetak tanggal commit di samping setiap file. Tiap gambar diperiksa otomatis: gambar yang nyaris kosong diambil ulang, dan dua gambar kembar berarti dua baris menunjuk baris kode yang sama, jadi salah satunya dipindah ke titiknya sendiri. Begitu selesai, profil browser sementara yang menyimpan sesi login saya dihapus.
Tulis dokumen dari draft yang sudah diverifikasi. Dokumen dibangun lewat library penulis dokumen, bukan hasil konversi otomatis dari draft, supaya tata letak, tabel, dan gambarnya mendarat tepat di tempatnya. Baris-barisnya dibangkitkan dari draft yang sudah lolos pemeriksaan, tidak diketik ulang, jadi dokumen dan draft tak mungkin saling menyimpang.
Render dokumen lalu lihat hasilnya. Dokumen yang bisa dibuka belum tentu tercetak dengan benar. Setiap laporan di-render ke PDF lalu halamannya diperiksa: orientasi, spasi, header tabel yang berulang di setiap halaman, gambar di dalam selnya. Jumlah baris dan gambar dihitung dari dokumennya sendiri, bukan dari teks hasil ekstraksi PDF, karena teks rata kiri-kanan memotong kata dengan cara yang membuat hitungan seperti itu tak bisa dipercaya.
Tinjau, lalu serahkan. Laporan hasil render saya baca sebelum lepas dari tangan saya. Adil tidaknya laporan itu terhadap bulan yang dilaporkannya adalah penilaian, dan itulah satu langkah yang tak akan pernah saya serahkan ke agent.
Yang saya otomatiskan, dan yang sengaja tidak
| Langkah | Otomatis atau manual | Alasan |
|---|---|---|
| Menemukan repository dan mengumpulkan commit | otomatis | saringan yang sama setiap bulan, diterapkan dengan cara yang sama ke setiap repository |
| Mengelompokkan commit dan menyusun draft | otomatis, oleh AI agent | membaca setiap perubahan lalu menuliskannya untuk pembaca non-teknis adalah bagian yang lambat, dan agent membaca semuanya |
| Memastikan setiap commit tercatat | otomatis, sebagai gerbang | commit yang hilang atau berlebih tak terlihat di laporan yang sudah jadi |
| Login ke code host | manual | kredensial dan sesi saya tak pernah diserahkan ke tool |
| Mengambil dan memeriksa bukti | otomatis | banyak gambar yang seragam persis jenis pekerjaan yang hasilnya tak konsisten bila dikerjakan orang |
| Menulis dan me-render dokumen | otomatis | dibangkitkan dari draft yang sudah diverifikasi, jadi tak bisa berbeda darinya |
| Meninjau laporan | manual | adil tidaknya laporan terhadap bulannya adalah penilaian |
Saat gagal
Kegagalan yang saya temui ada di langkah bukti: yang muncul halaman login, bukan kodenya. Ini terjadi bila sesi browser sudah kedaluwarsa, atau bila repository diambil gambarnya dari mirror yang belum menerima commit terbaru, sehingga baris yang ditunjuk belum ada di sana.
Karena itu pemeriksaannya dilakukan sebelum pengambilan gambar, bukan sesudahnya. Dari browser pengambil gambar saya membuka satu halaman kode di setiap host dan mengharapkan halaman biasa, bukan redirect ke form login. Untuk mirror, commit terakhir yang ia pegang dibandingkan dengan commit terakhir di repository lokal saya. Bila sesinya kedaluwarsa, saya login ulang; bila mirror-nya tertinggal, ia disinkronkan dulu. Hanya titik yang gagal yang diambil ulang, dan setiap gambar yang sudah lolos dibiarkan apa adanya.
Kenapa urutan ini
Setiap fase memakai hasil fase sebelumnya, dan setiap pemeriksaan ditaruh di titik ketika kesalahan masih murah. Commit dipastikan tercatat sebelum draft disusun, jadi draft hanya bisa menceritakan pekerjaan yang benar-benar terjadi. Bukti menyusul draft, karena draft-lah yang menentukan baris mana yang perlu dibuktikan. Dokumen baru ditulis sesudah bukti lolos, karena ia dibangkitkan dari keduanya. Render paling akhir, karena hanya file yang sudah jadi yang bisa memperlihatkan rupanya di atas kertas — dan tinjauan saya datang sesudahnya, karena hanya di titik itu saya bisa melihat laporan seperti pembacanya kelak melihatnya.
Variasi
Repository-nya berganti dari bulan ke bulan. Repository baru masuk ke laporan sejak bulan pertama ia berisi commit saya, dan repository yang bulan itu tak tersentuh cukup dilewati, tidak dilaporkan kosong. Tak ada bagian prosedur yang bergantung pada daftar bulan lalu.
Istilah
- Commit
- Satu perubahan yang tercatat di repository git, lengkap dengan pesan yang menjelaskannya.
- Merge commit
- Commit yang menyatukan dua jalur pekerjaan, dan mengulang perubahan yang sudah tercatat di tempat lain.
- Diff
- Baris-baris persis yang ditambahkan dan dihapus oleh satu commit.
- Code host
- Layanan web yang menyimpan repository git dan menampilkan kodenya di browser.
- Mirror
- Salinan repository di code host kedua, yang bisa tertinggal dari aslinya.
- Render
- Mengubah dokumen ke bentuk cetak akhirnya, di sini PDF, untuk melihat persis rupanya.
Technologies covered
- Git