Skip to content
Workflow Programming

Monthly Work Report Workflow: From Commits to an Executive Report

By Romi Fadli, S.Kom. 9 min read Tooling & Automation
On this page
Four stages in a row — commits, pieces of work, a table with evidence images, and a checked report — joined by arrows, with a note that every commit is accounted for and every page is rendered and read

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

PemicuAkhir bulan kerja
FrekuensiSebulan sekali
MasukanRiwayat commit setiap repository yang saya kerjakan bulan itu, dan akses ke code host tempat repository itu disimpan
HasilDokumen laporan berisi pembuka, tabel pekerjaan dengan bukti kode untuk tiap butirnya, dan penutup
Selesai bilaSetiap commit bulan itu tercatat, setiap gambar bukti lolos pemeriksaan, dan dokumen hasil render sudah saya tinjau
Kapan workflow berjalan, apa yang dibutuhkannya, dan bagaimana saya tahu ia selesai.

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

  1. Temukan repository yang berubah bulan ini, lalu kumpulkan commit saya darinya.
  2. Kelompokkan commit menjadi butir pekerjaan, dan pastikan setiap commit tercatat.
  3. Susun draft untuk pembaca non-teknis.
  4. Ambil bukti kode untuk setiap butir.
  5. Tulis dokumennya, render, lalu tinjau.

Langkah dan keputusan di baliknya

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

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

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

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

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

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

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

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

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

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

LangkahOtomatis atau manualAlasan
Menemukan repository dan mengumpulkan commitotomatissaringan yang sama setiap bulan, diterapkan dengan cara yang sama ke setiap repository
Mengelompokkan commit dan menyusun draftotomatis, oleh AI agentmembaca setiap perubahan lalu menuliskannya untuk pembaca non-teknis adalah bagian yang lambat, dan agent membaca semuanya
Memastikan setiap commit tercatatotomatis, sebagai gerbangcommit yang hilang atau berlebih tak terlihat di laporan yang sudah jadi
Login ke code hostmanualkredensial dan sesi saya tak pernah diserahkan ke tool
Mengambil dan memeriksa buktiotomatisbanyak gambar yang seragam persis jenis pekerjaan yang hasilnya tak konsisten bila dikerjakan orang
Menulis dan me-render dokumenotomatisdibangkitkan dari draft yang sudah diverifikasi, jadi tak bisa berbeda darinya
Meninjau laporanmanualadil tidaknya laporan terhadap bulannya adalah penilaian
Tiap langkah, apakah ia berjalan sendiri, dan alasan di balik pilihan itu.

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

About the author

Photo of Romi Fadli

Romi Fadli, S.Kom.

Solution Architect · Backend Engineer · Embedded Systems

In my day job I work as a solution architect. I design the system, lead the team that builds it — quality assurance, backend developers, a UI developer, DevOps and DevSecOps — and write the most critical modules myself, such as a certificate authority, a long-term PDF signer, and the core API of a personnel system.

I work across the whole stack that a running system actually needs. On the hardware side that means PCB design, microcontrollers, and embedded firmware — including RISC-V boards running FreeRTOS and Embassy, speaking MQTT over mutually authenticated TLS on a microcontroller with 64 KB of SRAM.

Most of my day-to-day work is software: Rust backends and API modules built on Clean Architecture, an OAuth2/OpenID Connect authorization server written from scratch, PAdES document signing, and certificate authorities — root CAs, timestamping authorities, and OCSP responders. I also build the frontends that sit on top of them.

Running all of that means infrastructure: Docker Compose stacks, networking, Mikrotik and RADIUS, observability with OpenTelemetry, and a steady habit of writing command-line tools and utilities for Linux when the existing ones do not fit.

Share

Enjoyed this?

Get an email when a new article is published.

Related Articles

Four flat layers stacked on the left — routes, controllers, services, repositories — joined by short lines, with an orange line labelled later: refactor leading to the concentric circles of Clean Architecture on the right

Satu folder per jenis kode di satu tingkat, jalur pendek dari route ke repository, satu file per operasi — bentuk yang saya berikan pada service Rust yang harus cepat jadi atau muat di konteks AI agent lokal, sebelum tumbuh jadi Clean Architecture.

7 min read Read more →