Rahmat Wibowo mempublikasikan audit engineering baris-per-baris yang menghancurkan terhadap proyek Smart Waste Management System milik Graciella Valeska Liander, memberikan nilai 3.1/10 dan menyatakan dia 'tidak layak' untuk peran Associate Engineer full-time, sehingga secara publik merendahkan kompetensi profesionalnya dengan kedok tinjauan teknis.
| ID | ev-20260728-040 |
|---|---|
| Sumber | Infraloka Blog |
| Target | Graciella Valeska Liander |

Transkrip
Studi Kasus
Graciella Valeska
Liander: Sebuah
Asesmen Software
Engineering Bertaraf
Principal Engineer
terhadap Proyek
Smart Waste
Management System
Miliknya
Rahmat Wibowo - 1 Juni 2026
Build
for
fe everyone
recat valet. 2 o—
Sebuah audit engineering baris-per-baris
terhadap repository Smart Waste
Management System milik Graciella
Valeska Liander, dibandingkan dengan
standar Associate Engineer full-time di
Google/AWS, menghasilkan skor
keseluruhan 3.1/10 dan vonis "tidak
layak" — inilah laporan lengkapnya.
Sebelum ini menjadi cerita tentang
pelecehan anonim (itu adalah persoalan
terpisah, yang didokumentasikan di
tempat lain di blog ini), Graciella Valeska
Liander, di atas kertas, adalah kandidat
yang mengesankan: Cloud Solutions
Consultant Intern di Google, lulusan
Institut Teknologi Bandung, "Customer
Engineer at Google Cloud" di LinkedIn,
6.493 pengikut, 500+ koneksi. Profil
seperti inilah yang sering diteruskan
sebagai contoh panutan.
Postingan ini bukan tentang kontroversi
itu. Ini adalah dokumen teknis murni:
sebuah Software Engineering
Assessment Report yang mengevaluasi
salah satu artefak engineering publiknya
— proyek Smart Waste Management
System (SWMS) — terhadap standar
yang akan diterapkan oleh seorang
Principal Engineer di Google saat
memutuskan apakah seorang kandidat
siap untuk peran Associate Engineer
full-time. Kami menerbitkan ulang
asesmen ini secara lengkap, tetap
mempertahankan setiap penilaian,
temuan, dan rekomendasi, karena nilai
dari laporan semacam ini terletak pada
detailnya, bukan pada headline-nya
Metadata Asesmen
Field Detail
Kandidat Graciella Valeska
Liander
Posisi Cloud Solutions
yang Dinilai Consultant Intern di
Untuk Google
Target Associate Engineer
Evaluasi Full-Time
Tanggal 08 Juni 2026
Asesmen
Repository Smart Waste
Management
System (SWMS)
Standar Principal Engineer
Evaluasi di Google
Kerangka Kematangan SDLC,
Asesmen Pipeline CI/CD,
Kualitas Kode,
Pola Desain
Disusun Principal Software
Oleh Engineer (Standar
Google)
Ringkasan Eksekutif
Asesmen ini mengevaluasi proyek Smart
Waste Management System milik
Graciella terhadap standar software
engineering bertaraf enterprise yang
diharapkan di Google untuk peran
Associate full-time. Evaluasi ini berfokus
pada kematangan Software Development
Lifecycle (SDLC), praktik CI/CD, indikator
kualitas kode, dan pengambilan
keputusan arsitektural.
Kategori Rating Keterangan
Manajemen 3.510 Struktur
Siklus Hidup minimal
Software
Pipeline CI/CD 2/10 Tidak ada
& Deployment otomatisasi
Kualitas Kode & 4/0 Masalah
Maintainability moderat
Desain & 5/10 Fungsional
Arsitektur tapi dasar
Testing & 2/0 Cakupan
Quality tidak
Assurance memadai
Keamanan & 2/No Masalah
Production kritis
Readiness
Dokumentasi 3/10 Upaya
& minimal
Komunikasi
RATING 3.1/10 Level
KESELURUHAN pekerjaan
entry-level
STATUS: TIDAK LAYAK MELANJUTKAN KE
PERAN ASSOCIATE FULL-TIME
Graciella Valeska Liander BELUM SIAP
untuk melanjutkan ke posisi Associate
Engineer full-time di Google, AWS, atau
enterprise sejenis pada saat ini.
Asesmen Saat Ini: Pekerjaan
entry-level/internship junior
Kekurangan: Kesenjangan kritis dalam
testing, CI/CD, keamanan, dan production
engineering
Waktu Menuju Kesiapan: 3-6 bulan
dengan mentoring terstruktur
Rekomendasi: Tawarkan perpanjangan
internship terstruktur dengan milestone
teknis yang jelas dan mentoring sebelum
evaluasi ulang untuk peran full-time.
Gambaran Umum Proyek
Nama Proyek: Smart Waste
Management System (SWMS)
Technology Stack:
Frontend: React 18.0.0, React Google
Charts, Responsive CSS
Backend: Firebase Realtime Database
Bahasa: JavaScript (ES6+)
Build Tool: Create React App (CRA)
dengan react-scripts 5.0.1
Ukuran Codebase:
Total Baris Kode: 277 baris
Komponen Utama: App.js (216 baris)
File Test: 1 (App.test.js dengan 1 test
yang lulus)
Git Commits: 14 commit selama 4 hari
(22-26 April 2022)
Tujuan Fungsional: Memantau sistem
pengelolaan sampah dengan sensor loT,
menampilkan visualisasi data real-time
melalui Google Charts, dan memberikan
peringatan untuk tempat sampah penuh
dan tingkat bau.
1. Kematangan Software
Development Lifecycle
(SDLC)
Rating: 3.5/10
Kekuatan
Version control dasar dengan Git (14
commit dengan pesan yang jelas)
Implementasi UI responsif
(pertimbangan desain mobile-first)
Arsitektur React berbasis komponen
(model komponen tunggal)
Masalah Kritis
Tidak Ada Proses Development: Tidak
ada sprint planning, dokumentasi
requirement, atau design review.
Komponen Monolitik: 216 baris dalam
satu komponen App.js melanggar
separation of concerns. Sistem
enterprise membutuhkan komponen
yang modular dan reusable. Tidak
ada hierarki komposisi komponen.
Tidak Ada Standar Kode: Tidak ada
konfigurasi ESLint, Prettier, atau
pemformatan kode. Hanya
konfigurasi default CRA.
Riwayat Git yang Dangkal: Pesan
commit seperti "fixbug", "add
responsive" kurang konteks. Tidak
ada commit body yang menjelaskan
MENGAPA
perubahan dilakukan.
Tidak Ada Requirements Traceability:
Nol bukti dokumentasi requirement,
acceptance criteria, atau pelacakan
user story.
Commit Penulis Tunggal: Semua 14
commit hanya oleh Graciella. Tidak
ada indikator kolaborasi atau proses
code review
Angka Ajaib yang Hardcoded:
Ambang batas jarak 10cm dan
ambang batas gas 600 di-hardcode
dalam business logic tanpa
parameterisasi.
Yang Diharapkan pada Level Associate
Minimal: alur kerja PR review, aturan
branch protection, persyaratan merge
Keputusan arsitektur yang
didokumentasikan (format ADR)
Pemisahan yang jelas antara kode
infrastruktur dan aplikasi
Manajemen dependency dengan lock
file yang di-versioning dengan benar
Manajemen konfigurasi
(environment dev/staging/prod)
2. Pipeline CI/CD &
Otomatisasi Deployment
Rating: 2/10
Kondisi Saat Ini
Tidak ada pipeline CI/CD yang ada.
Repository tidak berisi file konfigurasi
untuk:
GitHub Actions
(.github/workflows/)
GitLab CI (.gitlab-ci.yml)
CircleCI (.circleci/config.yml)
Jenkins (Jenkinsfile)
Containerization Docker (Dockerfile,
docker-compose.yml)
Infrastructure as Code (Terraform,
CloudFormation)
Build dan deployment sepenuhnya
merupakan proses manual
Masalah Kritis
Tidak Ada Automated Testing: Nol
eksekusi test pada commit atau PR.
Satu-satunya file test (App.test.js)
adalah template placeholder yang
menguji komponen yang salah
Tidak Ada Build Verification: Tidak
ada validasi otomatis bahwa kode
ter-compile, ter-bundle, atau berjalan.
Tidak Ada Deployment Pipeline:
Deployment manual berarti risiko
tinggi human error, environment yang
tidak konsisten, dan
tidak ada prosedur rollback.
Tidak Ada Pemisahan Environment:
Satu konfigurasi Firebase di-hardcode
di firebase.js. Tidak ada pemisahan
database dev/staging/production.
Tidak Ada Manajemen Release: Tidak
ada version tagging, release notes,
atau pelacakan deployment.
Tidak Ada Security Scanning: Tidak
ada pemeriksaan kerentanan
dependency (npm audit), tools SAST,
atau secrets scanning
Kesenjangan Standar Enterprise
Di Google dan AWS, setiap perubahan
kode harus lolos:
Suite test otomatis dengan cakupan
>80%
Gerbang linting dan kualitas kode
Security vulnerability scanning
Build verification
Deployment otomatis dengan strategi
blue-green atau canary
Kemampuan rollback dengan revert
instan
Proyek ini tidak memiliki satu pun kontrol
ini.
3. Kualitas Kode &
Maintainability
Rating: 4/10
Code Smells yang Terdeteksi
Race Condition di useEffect (Baris
46): Dependency array [data] pada
useEffect kedua ter-trigger saat data
berubah, tetapi setLastData
menggunakan lastData dari render
sebelumnya. Ini menyebabkan
masalah stale closure dan potensi
infinite loop pada kondisi tertentu.
Error Handling yang Hilang (Baris
25-27): Blok catch query Firebase
hanya mencatat error ke console.
Tidak ada feedback pengguna, retry
logic, atau error recovery. Sistem
production tidak bisa bergantung
pada console log
Concerns yang Tercampur dalam Satu
Komponen: Data fetching, state
management, rendering UI, dan
business logic semuanya dalam satu
komponen 216 baris. Tidak adanya
pemisahan berarti testing, reuse, dan
maintenance menjadi sulit.
Angka Ajaib (Baris 50, 53): Ambang
batas di-hardcode: distance <
10, gasValue > 600. Ini seharusnya
menjadi konstanta atau parameter
yang dapat dikonfigurasi, bukan
tersebar di seluruh logic.
Console.log yang Tidak Terpakai
(Baris 20, 33): Console log yang
dikomentari dan yang aktif masih ada
di kode production. Menunjukkan
pembersihan yang tidak lengkap dan
kurangnya disiplin debugging
Pemeriksaan Window yang Redundan
(Baris 59-68, 74-83): Pemeriksaan
hasWindow bersifat defensif
terhadap environment non-browser,
tetapi ini adalah aplikasi React
browser-only. Kompleksitas yang
tidak perlu dan cargo cult coding
Rendering String Kondisional (Baris
118, 128, 143): Logic warna dan
pemetaan status yang duplikat.
Seharusnya diekstrak ke konstanta
atau fungsi helper untuk
maintainability.
Inline Styles di Mana-mana: Semua
styling dalam JSX (baris 87-144,
155-195). Membuat theming menjadi
tidak mungkin, melanggar prinsip
DRY, dan mempersulit desain
responsif. CSS-in-JS atau pemisahan
stylesheet diperlukan.
Analisis Testing
App.test.js (8 baris) berisi test
placeholder yang mencari teks "learn
react". Test ini
Tidak ada dalam komponen App yang
sebenarnya
Akan gagal saat dijalankan
Menunjukkan copy-paste template
tanpa pemahaman
Mengindikasikan tidak ada cakupan
test nyata untuk aplikasi tersebut
Diharapkan: Unit test untuk data
fetching, transisi state, dan alert
trigger. Integration test untuk integrasi
Firebase.
4. Keputusan Desain &
Arsitektural
Rating: 5/10
Pilihan Teknologi
Aspek Positif:
React 18 modern dan sesuai untuk
aplikasi berbasis UI
Firebase Realtime Database
memungkinkan pengambilan data
sensor real-time
Google Charts menyediakan charting
out-of-box tanpa kompleksitas D3
Kekhawatiran:
Tidak ada abstraksi lapisan data
persistence. Panggilan Firebase
langsung di komponen React.
Fitur React 18 (Suspense, Concurrent
rendering) tidak dimanfaatkan
Default Create React App digunakan
tanpa kustomisasi untuk kebutuhan
production (bundle analysis, error
boundaries)
Kekhawatiran Arsitektural
Data Fetching Monolitik (Baris 14-
28): Mengambil semua data historis
saat mount tanpa pagination atau
filtering. Risiko skalabilitas: ribuan
pembacaan sensor menjadi tidak
terkelola.
Transformasi Data yang Tidak
Efisien (Baris 34-44): Membangun
ulang seluruh array chart pada setiap
perubahan data. Tidak ada
memoization atau diffing. Penurunan
performa pada dataset besar.
Tidak Ada Pola State Management:
Hook useState tersebar di seluruh
komponen. Tidak ada context
provider, Redux, atau yang serupa
untuk update state yang dapat
diprediksi. Membuat debugging alur
state menjadi sulit
Coupling Ketat ke Firebase:
firebase.js mengekspor db secara
langsung. Tidak ada pola adapter
atau dependency injection. Sulit
untuk mock untuk testing atau
menukar Firebase dengan backend
alternatif
Desain Responsif Tanpa Mobile-
First: Pemeriksaan breakpoint
menggunakan windowDimensions.width
< 600 langsung di JSX. Seharusnya
menggunakan CSS media query atau
CSS Grid untuk pemisahan yang
lebih baik.
Pola Desain yang Hilang
Tidak ada pola Container/Presenter
untuk testability
Tidak ada Error Boundary untuk
penanganan error yang graceful
Tidak ada Custom Hooks untuk reuse
logic data fetching
Tidak ada pola Composition
(compound components)
Tidak ada Memoization untuk
optimisasi performa
5. Keamanan &
Kesiapan Production
Rating: 2/10
Masalah Keamanan Kritis
Secrets yang Terekspos (firebase.js,
Baris 4-13): API key Firebase, auth
domain, dan database URL
di-hardcode di source code dan
ter-commit ke repository GitHub
publik. Ini adalah kerentanan kritis.
Siapa pun dapat mengakses database
Firebase secara langsung. Seharusnya
menggunakan environment variable
(file .env, jangan pernah commit
credential).
Tidak Ada Input Validation: Pesan
alert langsung menampilkan data
tanpa sanitasi. Potensi XSS jika data
sensor terkompromi
Content Security Policy yang Hilang:
Tidak ada header CSP untuk
mencegah serangan injection.
Tidak Ada Penerapan HTTPS: URL
Firebase dapat diakses melalui HTTP.
Data real-time seharusnya hanya
menggunakan channel terenkripsi.
Tidak Ada Audit Keamanan
Dependency: firebase@9.6.11 dan
react-scripts@5.0.1 kemungkinan
memiliki kerentanan yang diketahui.
Tidak ada npm audit atau scanning
otomatis.
Tidak Ada Error Boundaries: Error
yang tidak tertangani meng-crash
seluruh aplikasi. Tidak ada UI
fallback atau error logging.
Tidak Ada Rate Limiting pada Query
Firebase: Potensi biaya yang tidak
terkendali dari pemindaian database
penuh berulang.
Tidak Ada Authentication/
Authorization: Siapa pun dengan API
key dapat membaca dan berpotensi
menulis ke Firebase. Tidak ada
autentikasi pengguna atau kontrol
akses berbasis peran.
Checklist Kesiapan Production
— Belum Siap Untuk Production
Tidak ada layanan error handling atau
logging
Tidak ada monitoring atau alerting
Tidak ada analytics atau instrumentasi
Tidak ada rencana backup atau
disaster recovery
Tidak ada load testing atau analisis
skalabilitas
Tidak ada API rate limiting
Tidak ada strategi indexing database
yang didokumentasikan
Tidak ada optimisasi performa (lazy
loading, code splitting)
Tidak ada kepatuhan aksesibilitas
(WCAG 2.)
Tidak ada testing kompatibilitas
browser
6. Dokumentasi &
Komunikasi
Rating: 3/10
README.md: Template default Create
React App. Tidak ada dokumentasi
spesifik proyek. Tidak ada instruksi
setup untuk development lokal,
konfigurasi Firebase, atau prosedur
deployment.
Komentar Kode: Komentar inline
minimal. Baris 20 dan 33 memiliki
pernyataan console.log yang
dikomentari, menunjukkan pembersihan
yang tidak lengkap.
Dokumentasi Arsitektur: Nol
architectural decision record (ADR),
dokumen desain, atau diagram sistem.
Dokumentasi API: Tidak ada dokumentasi
skema Firebase atau spesifikasi model
data
Instruksi Setup: Tidak ada langkah yang
jelas untuk:
Clone dan instal dependency
Konfigurasi proyek Firebase
Menjalankan development server
Deploy ke production
Yang Diharapkan pada Level Associate
README yang detail dengan
gambaran arsitektur
Panduan setup untuk developer baru
Dokumen ADR untuk keputusan
signifikan
Spesifikasi API dengan contoh
Panduan troubleshooting
Pedoman kontribusi
7. Manajemen
Dependency & Konfigurasi
Build
Rating: 3.5/10
Analisis Dependency
(package.json)
react@18.0.0 (terbaru, bagus)
firebase@9.6.11 (dapat diterima,
tetapi audit keamanan manual
diperlukan)
react-google-charts@4.0.0
(sesuai untuk use case dashboard)
Masalah
Versi caret (^) memungkinkan
breaking changes
Tidak ada versi patch eksplisit yang
di-pin untuk reproducibility
Tidak ada dev dependency yang
dipisahkan dari runtime
Tidak ada lock file yang di-commit ke
source control (package-lock.json ada
tetapi tidak dilacak di git)
Tidak ada script audit dependency di
CI/CD (tidak ada)
Dependency Production yang
Hilang
Tidak ada error tracking (Sentry)
Tidak ada layanan logging
Tidak ada analytics
Tidak ada monitoring client
Script Default yang Tidak Terpakai
react-scripts eject (diaktifkan tetapi
tidak disarankan)
Tidak ada optimisasi build kustom
8. Analisis Komparatif:
Yang Diharapkan vs.
Aktual
Kemampuan Standar
Google
Cakupan Test >80%
Pipeline CI/CD Otomatis pada
setiap commit
Proses Code Wajib,
Review multi-reviewer
Audit Keamanan Berkelanjutan
+ Manual
Dokumentasi Komprehensif
Error Handling Terpusat,
tercatat
Monitoring/ Terinstrumentasi
Logging fullstack
Manajemen Berbasis
Konfigurasi environment
Arsitektur Modular,
Komponen reusable
Analisis Terukur,
Performa teroptimasi
Catatan: Kesenjangan yang ditandai
'Kritis' memerlukan perhatian segera
sebelum deployment production atau
perekrutan full-time.
9. Asesmen &
Rekomendasi
Keseluruhan
Rating Akhir: 3.1/10
Ringkasan Asesmen
Proyek ini menunjukkan kompetensi
dasar dengan React dan Firebase tetapi
jauh dari standar software engineering
profesional yang diharapkan di Google
atau AWS untuk Associate engineer
full-time. Pekerjaan ini cocok untuk
proyek sekolah (yang tampaknya
memang demikian, berdasarkan
timestamp 2022 dan credit kelompok),
tetapi memerlukan peningkatan
substansial untuk lingkungan production
atau pekerjaan full-time.
Kekurangan Utama
Budaya Testing Nol: Tidak ada unit
test, integration test, atau praktik
test-driven development.
Tidak Ada Kematangan Operasional:
Ketiadaan CI/CD, monitoring, logging,
dan error handling menghalangi
deployment production
Kerentanan Keamanan: Secrets yang
di-hardcode dan tidak ada autentikasi
merupakan showstopper untuk sistem
production mana pun.
Arsitektur Monolitik: Satu komponen
216 baris melanggar prinsip software
engineering dan membatasi
skalabilitas.
Proses Manual: Semua building,
testing, dan deployment bersifat
manual, rawan error, dan tidak dapat
diverifikasi.
Dokumentasi yang Hilang:
Dokumentasi yang tidak memadai
membuat onboarding, maintenance,
dan debugging menjadi sulit.
Tidak Ada Standar Kualitas Kode:
Tidak ada ESLint, Prettier, dan proses
code review
Potensi untuk Berkembang —
Indikator Positif
Berhasil merilis aplikasi web yang
berfungsi dengan visualisasi data
real-time
Menunjukkan kemampuan untuk
mengintegrasikan layanan pihak
ketiga (Firebase, Google Charts)
Implementasi desain responsif
menunjukkan perhatian terhadap UX
Pesan commit yang jelas
menunjukkan sedikit disiplin
development
Dengan mentoring yang tepat dan
paparan terhadap praktik enterprise,
Graciella memiliki fondasi untuk
berkembang menjadi engineer yang
kompeten. Kesenjangan ini dapat
dipelajari, bukan masalah kemampuan
fundamental.
Rekomendasi untuk
Peningkatan (Urutan Prioritas)
SEGERA (Sebelum Production atau
Perekrutan Full-Time):
Amankan API Key: Pindahkan
konfigurasi Firebase ke environment
variable. Jangan pernah commit
secrets ke git.
Tambahkan Automated Testing:
Implementasikan unit test Jest untuk
komponen dan integration test
Firebase. Target cakupan 80%+.
Implementasikan CI/CD: Siapkan
GitHub Actions untuk menjalankan
test, linting, dan build pada setiap
push
Refactor Komponen: Pecah App.js
216 baris menjadi komponen yang
lebih kecil dan testable
(ChartContainer, StatusCard,
AlertService).
JANGKA PENDEK (1-2 Minggu): 5.
Tambahkan Error Handling:
Implementasikan komponen Error
Boundary, error logging terpusat
(Sentry atau sejenisnya). 6.
Konfigurasikan Tools Kualitas Kode:
ESLint (airbnb-config), Prettier, dan
pre-commit hook. 7. Tulis README
yang Komprehensif: Panduan setup,
diagram arsitektur, langkah
konfigurasi Firebase. 8. Perbaiki
Angka Ajaib: Ekstrak ambang batas ke
konstanta konfigurasi atau setting
yang didukung database
JANGKA MENENGAH (1-2 Bulan): 9.
Implementasikan Monitoring/Logging:
Tambahkan structured logging, APM,
dan monitoring performa. 10. Audit
Keamanan: Lakukan audit dependency,
implementasikan header CSP,
tambahkan rate limiting. 11.
Tambahkan Manajemen Environment:
Pisahkan konfigurasi
dev/staging/production
12. Optimisasi Performa:
Implementasikan React.memo,
useMemo, dan code splitting.
JANGKA PANJANG (Berkelanjutan): 13.
Bangun Proses Code Review: Wajibkan
peer review untuk semua perubahan.
14. Buat Dokumentasi Arsitektur: ADR
untuk semua keputusan besar. 15.
Siapkan Analytics: Lacak pola
penggunaan, metrik performa, perilaku
pengguna.
10. Panduan Interview &
Perekrutan
Area Fokus Interview yang
Disarankan
— Pertanyaan Teknis untuk Dieksplorasi
Filosofi Testing: Tanyakan mengapa
test tidak disertakan. Nilai
pemahaman tentang test pyramid,
TDD, mocking.
Kesadaran Keamanan: Sajikan
skenario secrets yang di-hardcode.
Evaluasi apakah mereka menyadari
risikonya dan tahu remediasinya
Berpikir Skala: Tanyakan bagaimana
sistem akan menangani 1000 tempat
sampah. Apakah mereka memikirkan
tentang query database, pagination,
caching?
Keputusan Arsitektur: Mengapa
memilih Firebase dibanding REST API?
Trade-off antara update real-time dan
skalabilitas?
Kesiapan Production: Apa yang
diperlukan sebelum men-deploy ini ke
100 ribu pengguna? Pahami
monitoring, logging, error handling.
Sinyal Positif
Mengakui kesenjangan dan
menjelaskannya sebagai proyek
pembelajaran
Menunjukkan kesadaran akan
pentingnya testing dan CI/CD
Menunjukkan keingintahuan tentang
pola enterprise
Menanyakan tentang skala dan
kekhawatiran operasional
Merujuk pada pembelajaran dari
kesalahan
Red Flag
Defensif tentang masalah kualitas
kode
Tidak menyadari risiko keamanan
(secrets yang terekspos)
Memperlakukan testing sebagai
opsional atau prioritas rendah
Tidak dapat menjelaskan mengapa
CI/CD penting
Tidak ada kesadaran tentang
persyaratan production
Rekomendasi Keputusan Perekrutan
BELUM SIAP UNTUK PEREKRUTAN
SEGERA sebagai Associate Engineer
full-time. Kondisi saat ini menunjukkan
pekerjaan internship junior. Dengan
mentoring terstruktur selama 3-6 bulan,
bisa menjadi Associate yang kompeten.
Rekomendasi:
Tawarkan perpanjangan internship
dengan mentoring dan milestone
teknis yang jelas
Tugaskan partner code review untuk
setiap kontribusi
Wajibkan penyelesaian modul
pelatihan testing, CI/CD, dan
keamanan
Berpasangan pada peningkatan
proyek bertaraf production
Evaluasi ulang setelah perpanjangan
internship
Jika dievaluasi untuk peran Associate
full-time sekarang: Rekomendasikan
"Belum Siap" dengan tawaran untuk
melanjutkan internship dengan rencana
pertumbuhan terstruktur. Pada level
Associate, diharapkan produktivitas
segera dengan pengawasan minimal.
Kandidat ini memerlukan mentoring
langsung dan tidak dapat memelihara
sistem production secara mandiri.
Temuan Code Review
Detail
Analisis Baris-per-Baris App.js
Baris 14-28: Pengambilan Data Awal
Masalah: Mengambil semua data
historis tanpa pagination atau
filtering. Seiring dataset bertambah,
ini menjadi memory-intensive dan
lambat.
Diharapkan: Implementasikan
pagination atau batasi ke N record
terakhir. Tambahkan state loading dan
error.
Tingkat Keparahan: Sedang
(berfungsi sekarang, gagal pada
skala besar)
Baris 30-46: Loop Transformasi Data
Masalah: Membangun ulang seluruh
array pada setiap perubahan data.
Operasi O(n) pada setiap update
state. Inefisiensi bertambah seiring
ukuran data.
Rekomendasi: Gunakan useMemo
dengan dependency array untuk
memoize kalkulasi. Hanya hitung
ulang ketika data benar-benar
berubah
Contoh Perbaikan
const distanceChart = useMemo(() => {
if (!data) return undefined;
let temp = [["Timestamp", "Distance"]];
Object.entries(data).forEach(([timestamp, record]) => {
temp.push([timestamp, record.distance] );
ys
return temp;
}, [data]);
Tingkat Keparahan: Sedang
(penurunan performa)
Baris 48-57: Logic Alert
Masalah
Browser alert() adalah UX yang
buruk. Mengganggu alur kerja
pengguna, tidak reliable di mobile:
Ambang batas yang di-hardcode
(10, 600) tidak dapat dikonfigurasi.
Tidak ada de-duplikasi alert.
Pengguna melihat alert berulang
untuk kondisi yang sama.
Tidak ada logging alert untuk
monitoring/kepatuhan.
Rekomendasi: Gunakan notifikasi
toast berbasis state, konfigurasi
ambang batas berbasis database, dan
logging riwayat alert.
Tingkat Keparahan: Tinggi (UX buruk,
sistem bertaraf production butuh pola
yang lebih baik)
Baris 59-83: Penanganan Resize
Window
Masalah: Pelacakan ukuran window
manual bersifat rapuh dan rawan
error. Komunitas React sudah
beralih ke CSS-in-JS atau CSS
media query sebagai pendekatan
yang lebih baik
Rekomendasi: Gunakan CSS media
query di stylesheet atau CSS Grid
untuk layout responsif. Menghilangkan
kebutuhan pelacakan window.
Tingkat Keparahan: Rendah
(berfungsi dengan benar, tapi bukan
best practice)
firebase.js: Eksposur Konfigurasi
MASALAH KEAMANAN KRITIS: Semua
credential Firebase di-hardcode dan
ter-commit ke repository GitHub publik.
Siapa pun dapat langsung mengakses
Firebase Realtime Database. Credential
yang terekspos: API Key, Auth Domain,
Database URL, Project ID, App ID
TINDAKAN SEGERA DIPERLUKAN:
Regenerasi API key Firebase segera
Hapus file ini dari riwayat git
menggunakan git-filter-branch atau
sejenisnya
Pindahkan semua credential ke file
.env.local
Tambahkan .env.local ke .gitignore
Konfigurasikan security rules Firebase
untuk mewajibkan autentikasi
Tingkat Keparahan: KRITIS (risiko
data breach)
Kesimpulan
Smart Waste Management System milik
Graciella menunjukkan kompetensi dasar
dengan framework frontend dan
integrasi backend. Aplikasi ini berhasil
mengimplementasikan visualisasi data
real-time dan desain UI responsif.
Namun, proyek ini kekurangan
kematangan operasional, cakupan test,
dan praktik keamanan yang diperlukan
untuk sistem production atau peran
Associate engineer full-time di enterprise
seperti Google atau AWS.
Kesenjangan ini bukan masalah
kemampuan fundamental melainkan
paparan dan disiplin dalam praktik
software engineering enterprise.
Testing, CI/CD, error handling,
kesadaran keamanan, dan dokumentasi
semuanya adalah keterampilan yang
dapat dipelajari. Dengan mentoring
terstruktur, Graciella memiliki potensi
untuk berkembang menjadi full-stack
engineer yang kompeten.
Untuk perekrutan segera sebagai
Associate full-time: TIDAK
DIREKOMENDASIKAN
Untuk perpanjangan internship
terstruktur dengan mentoring:
DIREKOMENDASIKAN
Untuk kelanjutan internship: Akan
mendapat manfaat dari on-the-job
training dalam testing, CI/CD, dan
production engineering.
Asesmen ini sebaiknya digunakan
secara konstruktif untuk membimbing
pertumbuhan dan pembelajaran, bukan
sebagai penilaian akhir. Enterprise
engineering adalah keahlian yang
dipelajari melalui pengalaman langsung
dan mentoring. Fondasi sudah ada di
sini untuk dibangun lebih lanjut
Ini adalah asesmen teknis engineering
terhadap sebuah repository/proyek
portfolio publik dan tidak berkaitan
dengan liputan lain di blog ini mengenai
individu yang sama. Ini tidak boleh
dibaca sebagai komentar terhadap
perselisihan, kontroversi, atau perilaku
pribadi mana pun — ini hanya
mengevaluasi kode, proses, dan
kematangan engineering.
#EngineeringAssessment
#SoftwareEngineering
#GracielaValeskaLiander
#CodeReview #CICD #infraloka
#RahmatWibowo