Dari Freelancer ke Corporate: Pelajaran Engineering di Skala Berbeda
Latar Belakang Saya
3 tahun terakhir perjalanan saya sebagai Fullstack Developer:
- Tahun 1: Freelancer - 5-7 proyek klien dengan tech stack beragam (PHP, React, Android native)
- Tahun 2-3: Bekerja di perusahaan teknologi di Bali - fokus membangun produk internal dengan tim engineering 8 orang
Saya kira coding adalah universal - 'code is code, kan?' Tidak. Cara mengembangkan software freelance vs corporate adalah dua dunia berbeda. Artikel ini adalah pelajaran paling penting dari transisi tersebut.
1. Manajemen Waktu: Lonely Wolf vs Sprint Cycle
Freelancer: Tuan Rumah Sendiri
Senin: coding dari 9 pagi sampai 3 pagi (hypomania)
Selasa: benerin bug kecil, scroll Twitter gratis
Rabu: meeting klien 1 jam, lanjut webtoon
Kamis: deadline, coding 16 jam nonstop
Jumat: delivery, bayar invoice, nongkrong
Klien peduli deadline akhir saja. Bagaimana pakai waktu, Anda tentukan. Tapi kontrol diri adalah bottleneck: kalau hari buruk, tidak ada progress. Tidak ada yang menegur kecuali klien telepon marah.
Corporate: Ritual Sprint
Senin 09:00: Daily Standup (15 menit) - satu kalimat progress
Senin 14:00: Sprint Planning (1 jam)
Rabu 14:00: Mid-sprint check-in
Jumat 15:00: Sprint Review + Retrospective
Setiap hari: commitsan code review (PR approval dari 2 senior)
Awalnya saya kesal dengan 'terlalu banyak meeting'. Lalu saya sadar: meeting singkat itu memaksa komunikasi progress. Tidak ada hari 'males' berlarut-larut. Accountability eksternal itu powerful untuk konsistensi.
Pelajaran: Ritual sprint = produktivitas sustainable. Bukan produktivitas 16 jam one-push, tapi 8 jam sustainable 5 hari seminggu.
2. Standar Kode: 'Bisa jalan' vs 'Maintenance friendly'
Freelancer: Output Above All
Contoh kode PHP untuk login dulu saya:
// login.php - yang penting jalan
<?php
session_start();
if ($_POST['email'] && $_POST['password']) {
$q = mysqli_query($conn, "SELECT * FROM users WHERE email='".$_POST['email']."'");
$u = mysqli_fetch_assoc($q);
if ($u['password'] == $_POST['password']) {
$_SESSION['user'] = $u['id'];
header("Location: dashboard.php");
}
echo "Login gagal";
}
Problem: SQL injection, plain text password, no error handling. Tapi klien bayar, web jalan, deal selesai.
Corporate: Code Review Culture
Di perusahaan, PR saya perlu approval dari 2 senior engineer. Pertama kali PR saya reject dengan 47 comments:
- Security: password verifier pakai bcrypt (bukan ==)
- Architecture: Dao pattern untuk user repository
- Test: 73% code coverage minimum (kami target 80%)
- Docs: doc comment untuk setiap public method
- Style: PSR-12 compliance
Versi perusahaan:
declare(strict_types=1);
namespace App\Http\Controllers\Auth;
final class LoginController extends Controller
{
public function __construct(
private readonly UserRepository $users,
private readonly PasswordHasher $hasher,
) {}
/**
* @throws AuthenticationException when credentials are invalid
*/
public function __invoke(LoginRequest $request): RedirectResponse
{
$user = $this->users->findByEmail($request->string('email'));
if ($user === null || !$this->hasher->verify($request->string('password'), $user->password)) {
throw AuthenticationException::invalidCredentials();
}
Auth::login($user, remember: $request->boolean('remember'));
return redirect()->intended(route('dashboard'));
}
}
Test:
// tests/Feature/Auth/LoginControllerTest.php
public function test_invalid_credentials_throws_exception(): void
{
$this->post('/login', ['email' => 'invalid@x.com', 'password' => 'wrong'])
->assertStatus(401);
}
Pelajaran: 'Bisa jalan' adalah baseline. 'Maintainable, secure, tested' - itu standar perusahaan. Awalnya terasa lambat, tapi investment. Setahun kemudian, codebase klien saya masih easy untuk onboarding engineer baru. Codebase freelance saya butuh rewrite total.
3. Arsitektur Sistem: Monolith Cepat vs Services Matang
Freelancer: Monolith untuk Speed
Freelance project e-commerce:
- Laravel monolith
- 1 server container
- MySQL 1 instance
- Deploy: FTP upload
- Load: <100 pengguna harian
Saya build dalam 2 minggu. Bagus untuk MVP dan traffic rendah.
Corporate: Distributed untuk Resilience
Corporate product:
- Microservices (8 services)
- API Gateway (Kong)
- DB terpisah per service
- Redis cache cluster
- Elasticsearch untuk search
- Kafka message queue
- Kubernetes deployment
- Auto-scaling: 3-8 replicas per service
Investasi awal rumit, tapi menguntungkan saat:
- Service A down -> service B tetap jalan
- Service dengan beban tinggi -> auto-scale, tidak ganggu lain
- Tim engineer 8 orang -> parallel development tanpa conflict
Pelajaran: Pilih berdasarkan skala. Jangan over-engineer monolith untuk project freelance. Jangan under-architect untuk produk corporate yang harus reliable.
4. Komunikasi Stakeholder: Klien vs Cross-Team
Freelancer: Single Point of Contact
Freelancer -> Klien
Saya bicara langsung dengan founder/CEO. Kalimat 'lengkap bisa Selasa'
cukup. Kalimat teknis tidak perlu dijelaskan.
Corporate: Multi-Stakeholder
Engineer -> Senior Engineer
-> Engineering Manager
-> Product Manager
-> QA Lead
-> Designer
-> DevOps Engineer
-> Stakeholder Bisnis
Saya belajar communicate di beberapa level:
- Engineer peer: pakai teknis ('refactor supaya test bisa pakai mock DB')
- PM: fokus impact user ('reduce checkout time 40% dengan async payment')
- Stakeholder bisnis: gunakan metric ('conversion naik 12%, jadi revenue +$8k/bulan')
Pelajaran: komunikasi yang baik di corporate = translate technis ke language stakeholder. Bahasa teknis untuk engineer peer, impact bisnis untuk executive.
5. Tools dan Stack: 'Terserah Klien' vs 'Standar Tim'
Freelancer: Pilih Bebas
Pernah saya pakai:
- PHP CodeIgniter (kenapa? klien punya shared hosting murah)
- Vanilla JavaScript (kenapa? project kecil, tak perlu framework)
- Vue SPA (kenapa? sebagai programmer Vue saya senang)
Tapi item ware: kalau klien minta ganti stack? Epik - saya mulai dari nol lagi.
Corporate: Standardization
Backend: Go (standard library + Fiber) = align dengan tim
Frontend: React + Next.js (App Router) = investment training perusahaan
Database: PostgreSQL = DBA team manage
Cache: Redis cluster = DevOps setup
Monitoring: Prometheus + Grafana = everyone pakai
CI/CD: GitHub Actions = semua engineering follow
Mula-mula terasa terikat. Tapi invest: knowledge saya reusable antar services. Engineer baru bisa berubah-mampu dalam seminggu karena tooling familiar.
6. Mental Health dan Burnout
Freelancer
- Bekerja sendirian, isolasi tinggi
- Income tidak menentu (asnaf-qitha): pernah bulan untung 2x lipat, pernah 0
- Cognitive load: handle semua (dev, marketing, finance, support) sendirian
Corporate
- Tim support, ada tempat curhat
- Income stabil, ada benefit (BPJS,THR)
- Tetappoten burnout: melempar tanggung jawab cross-team, kejar sprint deadline, code review critical
Pelajaran: burnout datang dari berbagai bentuk. Identifikasi trigger awal. Saya freelance 2 tahun akhirnya dapat depresi minor. Sekarang di corporate, saya pakai pomodoro, walk meeting, dan no-code-weekend.
7. Pelajaran Berharga yang Saya Bawa
Dari keduanya, ini yang saya bawa forward:
Dari freelance tetap saya pakai:
- Bias belajar cepat dan self-directed - alat freelance sekarang transisi tech lebih cepat dari training formal
- Memahami bisnis end-to-end - klien freelancer adalah client. Saya tahu dime (ROI) tiap fitur
- Scrappy problem solving - tidak ada infra? Sanggup workaround
Dari corporate saya bawa ke kerja sehari-hari:
- Code review dan test-driven development (TDD)
- Documentation wajib (di code, di README, di ADR)
- Ritual standup dan planning
- Anti-pattern engineering: single point of failure, missing monitoring, no on-call rotation
8. Tips untuk Developer yang Ingin Transisi
Freelancer ke Corporate
- Kuasai testing dan CI/CD - ini gap paling umum freelance
- Pelajari design pattern SOLID - bukan untuk pamer, tapi untuk komunikasi tim
- Tulis artikel atau blog teknis - portfolio teknis Anda untuk recruiter
- Kontribusi open-source - menunjukkan kemampuan kolaborasi asinkron
- Soft skill: komunikasi dengan PM dan stakeholder non-teknis
- Bersiap untuk lambat: code review butuh waktu, approval lintas tim butuh waktu. It's okay
Corporate ke Freelancer
- Pelajari marketing digital dan personal branding - klien tidak datang sendiri
- Kuasai contract writing: scope, deliverable, payment terms
- Buat sistem template: kontrak, proposal, invoice (saya pakai Notion + Stripe)
- Manajemen finansial: income tidak menentu -> budget buffer 6 bulan
- Bangun portfolio yang dapat di-showcase: kasus nyata lebih kuat dari CV
- Self-management skill: structure hari. Tanpa manager, harus disiplin diri
9. Refleksi Akhir: Tidak Ada yang Lebih Baik
Pertanyaan yang saya dapat sering: 'mana lebih enak, freelance atau corporate?' Jawaban: tidak ada.
- Freelance cocok kalau: Anda highly motivated self-starter, ingin punya freedom penuh waktu, dan kuat dengan ketidakpastian income
- Corporate cocok kalau: You value pembelajaran dari senior, teamwork, dan income stabil
Saya saat ini corporate full-time + freelance project kecil-kecil (di sela-sela waktu). Kombinasi ini memberi stabilitas + outlet kreatif. Setiap orang punya sweet spot-nya sendiri.
Kesimpulan
Transisi dari freelancer ke corporate bukan downgrade atau upgrade - itu pivot dengan mindset berbeda. Kalau Anda freelance dan berpikir corporate lebih 'mudah', siaplah untuk shock kultur. Jika dari corporate menuju freelance, siapkan otot self-management.
Setelah 3 tahun jalan karir: invest terus belajar, dokumentasikan pengalaman, dan share ke komunitas. Kombinasi pengalaman freelance dan corporate membuat saya lebih flexible engineer. Tidak terikat dogma salah satu.