Living life and Make it Better

life, learn, contribute

Endy Muhardin

Software Developer berdomisili di Jabodetabek, berkutat di lingkungan open source, terutama Java dan Linux.

Apa itu CMMI?

Di milis Asosiasi Pengembang Perangkat Lunak Indonesia (APPLI) ramai dibahas mengenai standarisasi dalam pengembangan perangkat lunak. Salah satu standar yang populer digunakan adalah CMMI (Capability Maturity Model Integration) yang dikembangkan oleh Carnegie-Mellon University, untuk lebih tepatnya dalam departemen Software Engineering Institute. Selain itu, ada juga blog ini dan ini yang membahas tentang CMMI.

Dengan adanya standar, organisasi dapat berkembang dengan lebih terarah. Semua anggota organisasi mulai dari programmer, analis, tester, manajer, dan direktur menjadi tahu apa ruang lingkup pekerjaannya. Apa yang harus disediakan bagi pihak lain, dan juga apa yang bisa diharapkan dari departemen lain. Dengan demikian, tidak banyak effort yang terbuang karena miskomunikasi atau kurang koordinasi.

Sayangnya, dunia enterpreneur IT di Indonesia masih jarang yang hirau terhadap masalah standarisasi ini. Berbagai alasan dikemukakan, antara lain:

  • Tidak mengerti bahasa Inggris

  • Standar luar negeri tidak cocok untuk kondisi lokal

  • Standar membuat organisasi monoton dan membosankan

  • dan segudang alasan lainnya

Menurut saya, segala alasan itu cuma pembenaran saja untuk sifat malas belajar. Sebagai praktisi IT, tentunya kita sadar bahwa dunia tempat kita hidup sekarang (internet) dibangun di atas standar. Untuk bisa browsing, kita menggunakan protokol HTTP. Memeriksa email, menggunakan protokol POP3, IMAP, dan SMTP. Chatting, menggunakan protokol IRC, XMPP. Voice chat, menggunakan protokol SIP.

Protokol adalah nama lain dari standar. So, standar membuat hidup kita menjadi lebih baik. Setidaknya, standar apapun lebih baik daripada tanpa standar. Melalui artikel ini, mudah-mudahan para praktisi tergerak untuk setidaknya mempelajari dulu standar sebelum mengeluarkan vonis “tidak perlu” atau “tidak sesuai”.

Sekarang, mari kita lihat standarisasi dalam pengembangan perangkat lunak. Standar yang populer dan cukup saya kuasai adalah CMMI, jadi mari kita bahas tentang CMMI. Kebetulan saya pernah ikutan mengantarkan BaliCamp meraih CMMI Maturity Level 3.

Apa itu CMMI

CMMI adalah singkatan dari Capability Maturity Model Integration. Ini adalah kerangka kerja (framework) yang bisa digunakan untuk mengembangkan proses di dalam perusahaan.

Apa itu proses? Proses adalah cara kita melakukan suatu tugas. Misalnya, membuat proposal, menganalisa kebutuhan client, membuat kode program, dan kegiatan lainnya. Semua tata laksana kegiatan tersebut dikenal dengan nama proses atau prosedur.

CMMI membantu kita untuk memperbaiki proses di perusahaan/organisasi kita. Dengan membaiknya proses, diharapkan produk yang dihasilkan akan ikut menjadi baik.

CMMI dirumuskan oleh Software Engineering Institute di Carnegie Mellon University. Para peneliti di SEI telah mengamati proyek pembangunan perangkat lunak di seluruh dunia, mulai dari proyek kecil sampai proyek raksasa. Organisasi yang diteliti meliputi NASA, IBM, dan kontraktor Departemen Pertahanan Amerika Serikat. Pengalaman yang dimiliki organisasi tersebut dirangkum dalam seperangkat aturan yang disebut CMMI. Nah, apakah perusahaan kita sudah lebih canggih daripada organisasi di atas, dalam hal mengelola proyek software? Kalau belum, mari kita belajar dari mereka.

Apa sih isinya CMMI ??

CMMI terdiri dari rangkaian practices. Dalam rangkaian practices ini ada rambu-rambu atau rekomendasi yang dapat diikuti. Practices dalam CMMI dibagi menjadi dua, yaitu Generic Practices (GP) dan Specific Practices (SP).

Bila kita sudah mengimplementasikan practices dengan sempurna, kita dianggap sudah memenuhi Goals. Sama seperti practices, ada Generic Goals (GG) dan Specific Goals (SG).

SG dan SP dikelompokkan menjadi Process Area (PA). Total ada 22 Process Area dalam CMMI for Development versi 1.2.

Daftar PA, GG, SG, GP, dan SP dapat dilihat di spesifikasi CMMI yang bisa didonlod gratis di sini.

Apa hubungannya CMMI dengan standarisasi ISO

CMMI dan ISO sama-sama standar yang digunakan untuk menilai proses suatu organisasi. Kalau kita programmer Java, kita punya sertifikasi SCJP, SCWD, SCBCD, dan sebagainya. Nah, anggap saja CMMI atau ISO ini adalah sertifikasinya perusahaan.

Kalau di SCJP yang dinilai adalah penguasaan kita terhadap bahasa pemrograman Java, maka di ISO/CMMI yang dinilai adalah penguasaan perusahaan terhadap prosesnya sendiri.

Perbedaan CMMI dan ISO terletak pada ketelitiannya. Bila kita ingin perusahaan kita mendapat sertifikasi ISO, perusahaan kita harus memiliki Standard Operating Procedure (SOP) yang tertulis. Kemudian kita harus membuktikan pada badan sertifikasi bahwa SOP tersebut kita jalankan dengan baik. Apa saja yang kita tulis dalam SOP bebas terserah kita. ISO tidak mengatur sampai ke tingkat itu.

Berbeda dengan CMMI, selain kita punya SOP, dia punya aturan khusus tentang isi SOP. Misalnya, kalau kita melakukan analisa kebutuhan (requirement gathering), ada beberapa aturan yang harus diikuti, misalnya:

  • Pernyataan kebutuhan user harus dicatat

  • Pernyataan kebutuhan harus dikonfirmasi ke user

  • Pernyataan kebutuhan harus disetujui kedua pihak

  • Kalau ada perubahan, harus dicatat

  • Antara kebutuhan dan software yang dideliver, harus bisa dilacak bolak-balik

Singkatnya, kalau kita lulus ISO, belum tentu lulus CMMI. Sebaliknya, kalau kita lulus CMMI, besar kemungkinan kita akan langsung lulus ISO bila ikut sertifikasinya.

Apa yang dimaksud Maturity Level ??

Tujuan awal dirumuskannya CMMI sebenarnya adalah untuk mendukung proses tender di lingkungan Departemen Pertahanan Amerika Serikat (US-DoD). Mereka ingin memiliki sistem penilaian terhadap semua vendor yang mengajukan proposal. Untuk itu dirumuskanlah sistem penilaian vendor berupa Maturity Level (ML).

Maturity Level di CMMI ada 5, mulai dari yang terendah ML 1, sampai yang paling canggih ML 5. Bila perusahaan kita sudah ML-5, maka kita bisa ikut dalam tender proyek software rudal Patriot. Begitu kira-kira.

Setiap ML memiliki seperangkat PA yang harus dipenuhi agar kita berhak menggunakan titel ML tersebut. Sebagai contoh, bila kita ingin lulus ML-2, maka kita harus mengimplementasikan 7 PA. Untuk mencapai ML-3, kita harus mengimplementasikan 7 PA dari ML-2 ditambah dengan 11 PA dari ML-3. Demikian seterusnya, sehingga ML-5 yang sudah mengimplementasikan 22 PA.

Bila kita sama sekali belum mengimplementasikan apa-apa, perusahaan kita dikategorikan sebagai ML-1. Level ini diadakan sebagai hiburan bagi perusahaan yang sudah ikut SCAMPI Class A, tapi tidak lulus bahkan di ML-2. Well, ML-1 kedengarannya lebih baik daripada No-ML atau ML-0 :p

Daftar lengkap PA per ML bisa dilihat di spesifikasi CMMI.

Perusahaan saya ingin mendapat ML-5, bagaimana caranya?

Pertama, tentunya perusahaan kita harus memenuhi semua persyaratan mulai dari ML-2 sampai ML-5. Perusahaan kita harus sudah punya SOP yang mengatur semua proses sesuai aturan CMMI. Bila ada aturan yang tidak kita pahami, kita bisa datangkan konsultan untuk menjelaskan.

Setelah ada SOP tersebut, setiap orang dalam perusahaan harus memahami dan menjalankannya dengan benar. Setelah kita yakin bahwa perusahaan kita mampu, kita mendatangkan appraiser atau auditor untuk memeriksa proses kita.

Kegiatan appraisal ini disebut dengan SCAMPI. Ada macam-macam SCAMPI, tapi yang berhak mengeluarkan peringkat ML hanyalah SCAMPI Class A.

Dalam SCAMPI, Lead Appraiser(LA) akan merekrut beberapa orang dari perusahaan kita untuk membantunya mengaudit. Tim auditor ini disebut Appraisal Team Member (ATM). Perusahaan kita juga juga harus menyediakan tim yang akan diwawancarai oleh ATM, yang disebut dengan Functional Area Representative (FAR).

FAR merupakan perwakilan dari berbagai departemen dalam organisasi. Mungkin nantinya akan ada kelompok FAR dari procurement, tim project, network administrator, programmer, tester, dan lainnya.

ATM dibutuhkan untuk menterjemahkan aturan CMMI ke dalam SOP perusahaan. Misalnya, dalam CMMI ada aturan mengenai analisa kebutuhan, yaitu process area Requirement Management (REQM) dan Requirement Development (RD). Process area ini di perusahaan A mungkin diimplementasikan dengan dokumen Software Requirement Specification (SRS), tapi di perusahaan B mungkin namanya User Requirement Specification (URS), dan di perusahaan C berupa Use Case Diagram dan User Stories. Nah, tugas ATM adalah menjembatani antara istilah CMMI dan istilah internal perusahaan.

Wawancara ATM tidak aneh-aneh. Untuk setiap proses area, mereka akan tanya apakah FAR sudah mengimplementasikan. Bila sudah, mana buktinya. Bukti ini bisa berupa hard-copy, bisa juga soft-copy. Kita bisa mengajukan email sebagai evidence. Bahkan kita juga bisa menunjukkan log Subversion atau item bug dalam aplikasi bug tracker.

Dalam sintaks Java 5, proses appraisal dalam SCAMPI Class A bisa digambarkan sebagai berikut.

int level = 1;

appraisal:
for(int i=1; i<=5; i++) {
    List allProcessAreas = maturityLevel[i].getProcessAreas();
    for(ProcessArea pa : allProcessAreas) {
        for(GenericPractice gp : allGenericPractices) {
            if(!far.isImplement(pa, gp) { break appraisal; }
        }

        for(SpecificPractice sp : pa.getSpecificPractices()) {
            if(!far.isImplement(sp)) { break appraisal; }
        }

        level++;
    }
}

Berdasarkan hasil wawancara FAR oleh ATM, LA akan memutuskan ML berapa yang pantas untuk perusahaan kita.

Semua hasil SCAMPI Class A akan dilaporkan pada SEI dan akan dipublikasikan di internet. Sebagai contoh, kita bisa melihat hasil appraisal BaliCamp pada tahun 2006.

Sayangnya, sampai sekarang belum ada appraiser lokal. Jadi kita harus mendatangkan appraiser dari luar negeri.

Informasi lebih rinci mengenai SCAMPI dapat dilihat di spesifikasi resminya. Di sana ada penjelasan rinci tentang apa saja syarat menjadi ATM, bagaimana proses interview dilakukan, dan bagaimana cara memutuskan apakah suatu evidence sudah memenuhi syarat atau belum.

Apa yang dimaksud Continuous Representation?

Perusahaan mengadopsi CMMI untuk berbagai tujuan. Ada yang bermotif marketing, yaitu meraih ML tertentu dengan harapan akan mendapat project dari US-DoD, ataupun simply memperkeren Company Profile. Sama saja dengan kita ambil SCJP.

Ada juga yang memang berniat meningkatkan kualitas prosesnya. Mengadopsi CMMI dengan harapan perusahaan akan menjadi lebih baik.

Kita kesampingkan dulu motif marketing. Mari kita lihat motif peningkatan kualitas. Ada beberapa pendekatan untuk mengadopsi CMMI. Kita bisa mengadopsi per ML, misalnya tahun ini ML-3, berikutnya ML-4, dan seterusnya. Atau bisa juga kita hanya memfokuskan perbaikan pada satu process area tertentu saja, misalnya Requirement Management, atau Risk Management.

Bila kita berorientasi ML, maka kita mengambil pendekatan Staged Representation. Sedangkan bila kita berorientasi PA, maka kita mengambil pendekatan Continuous Representation.

Bila perusahaan saya sudah ML-5, apakah perusahaan akan menjadi monoton dan membosankan? Apakah karyawannya akan menjadi seperti robot belaka??

Bagi programmer seperti saya dan Anda, kreativitas dan improvisasi adalah kenikmatan kerja yang utama. Itulah yang membuat kita memilih profesi software developer. Oleh karena itu, wajar bila kita mengkhawatirkan masalah ini.

Well, saya sudah pernah mengantarkan BaliCamp meraih ML-3, dan ikut terlibat dalam persiapan mencapai ML-5. Jadi, yang akan saya ceritakan ini adalah pengalaman nyata, bukan FUD (Fear, Uncertainty, Doubt).

Sebagai programmer yang terlibat dalam project, hal yang paling menyebalkan bagi kita bukanlah kesulitan teknis atau kerumitan algoritma. Semakin sulit, semakin menantang bagi kita. Hal yang paling menyebalkan adalah perubahan requirement di tengah jalan. Fitur yang kita implementasi dengan susah payah, bertampilan Web 2.0, menggunakan teknologi AJAX, tiba-tiba divonis client, “Ini bukan yang saya mau, GANTI !!!”.

Atau mungkin tidak se-ekstrim itu. End-user hanya minta geser tombol sedikit, tambah fitur sedikit, dan sedikit-sedikit lainnya, yang lama-lama tentunya akan menjadi bukit. Tiba-tiba, project sudah telat 2 bulan, dan fitur baru 50% terimplementasi. Bukan karena kita codingnya lama, tapi karena user minta perubahan melulu.

Nah, urusan perubahan requirement ini wajib hukumnya untuk dikelola dengan baik. Diatur dalam process area Requirement Management (REQM) yang ada di ML-2 dalam SP 1.3. Kalau perusahaan kita mengimplementasi REQM dengan baik, kita sebagai programmer akan lebih tenang hidupnya. Semua perubahan terhadap aplikasi yang sedang dibuat harus melalui rangkaian prosedur untuk memastikan perubahan tersebut benar-benar diinginkan dan sudah dipertimbangkan konsekuensinya. End-user tidak akan semena-mena meminta perubahan, tapi harus melalui persetujuan atasannya dan atasan kita. Dengan demikian, perubahan yang sampai pada programmer sudah pasti adalah perubahan yang penting, bukan hanya menurut end-user, tapi juga menurut sponsor project. Bahkan, adanya prosedur ini saja sudah cukup untuk membatasi liarnya imajinasi end-user.

Ini hanya satu contoh saja bagaimana implementasi CMMI memudahkan hidup kita sebagai programmer. Silahkan baca-baca spesifikasinya untuk mengetahui aturan-aturan lainnya. Secara umum, CMMI sama sekali tidak menyinggung tentang teknologi, IDE, tools, bahasa pemrograman yang digunakan. Bahkan kegiatan coding sendiri cuma dibahas dalam 2 PA dari 22 yang ada, yaitu Technical Solution dan Product Integration.

Technical Solution mengharuskan kita untuk mengidentifikasi alternatif pendekatan yang tersedia. Kemudian dari alternatif tersebut, kita pilih yang paling baik, berdasarkan kriteria yang kita tentukan sendiri. Jadi tidak boleh langsung coding, melainkan harus mikir dulu.

ML-4 dan ML-5 banyak menitikberatkan pada analisa kuantitatif dan continuous improvement. Sukakah anda terlibat dalam project yang selesai tepat waktu, tidak lembur, libur pada hari Sabtu-Minggu? Nah, kalau sudah ML-5, project seperti ini bukan lagi impian, tapi sudah menjadi hal yang biasa. Delay dalam project sudah bisa diketahui sejak dini. Dari mulai telat 1 hari, project manager sudah bisa tahu dan mengambil tindakan antisipasi seperti minta pengunduran jadwal, mengurangi requirement, dan sebagainya.

Sebagai programmer, tidak banyak perubahan yang kita rasakan selain project menjadi lebih tenang dan teratur. Yang paling besar terkena dampak implementasi CMMI adalah Project Manager. Tiba-tiba saja dia akan diharuskan membuat banyak dokumen dan menyediakan data. Pekerjaan administratifnya akan menjadi jauh lebih banyak.

Tentunya hal ini bisa diatasi dengan otomasi proses. Begitu prosesnya sudah rapi, kegiatan administrasi bisa di-online-kan. Masalah versioning dokumen bisa diatasi dengan Subversion. Daftar resiko project, task management, bug report, bisa diotomasi dengan Bug/Issue Tracker. Lagipula, bila perusahaan kita bergerak di bidang IT, tentunya persenjataan seperti itu sudah seharusnya menjadi lifestyle kita.

Demikianlah penjelasan singkat tentang CMMI. Lain waktu kita akan bahas satu persatu Process Area yang ada.

Semoga bermanfaat.


Long time no see

Mohon maaf bagi pembaca setia blog saya, karena sudah lama tidak ada artikel baru. Pada Februari 2008 yang lalu, saya mengambil keputusan yang mengubah arah hidup saya, mudah-mudahan ke arah yang lebih baik.

Saya mengundurkan diri dari posisi empuk dan pekerjaan menantang di Sigma Karya Sempurna (BaliCamp) dan memutuskan untuk menggarap ArtiVisi secara lebih serius bersama Ifnu.

Sebagai perusahaan start-up, banyak hal yang harus dilakukan pada masa awal berdirinya perusahaan. Hal-hal teknis seperti setup repository server dan hal non teknis seperti rumus penggajian pegawai, aturan cuti, dan sebagainya harus dipikirkan dan dibuatkan prosedurnya. Belum lagi pengembangan produk pelatihan dan standarisasi kualitas bahan ajar. Dan yang paling penting, cari proyek supaya dapur tetap ngebul. Sehingga akibatnya aktivitas blogging menjadi kalah prioritas.

Setelah empat bulan berlalu, banyak pengalaman yang didapat, dan juga banyak project yang sudah closing. Urusan non teknis yang penting juga sudah banyak yang bisa didelegasikan. Karena itu, mudah-mudahan saya bisa mengisi blog lagi.

Beberapa pengalaman yang rencananya akan saya tuliskan antara lain:

Stay tuned … :D


Road to Java EE

Another Frequently Asked Question.

Saya sudah menguasai Java Standard Edition dan sekarang mau belajar Java Enterprise Edition. Bagaimana learning-path-nya?

Inilah Road to Java Enterprise versi saya:

Tahap Pertama

  1. Belajar HTTP.
    • bedanya GET dan POST
    • apa itu session
    • bagaimana cara implement state management
    • konsep multipart dan mekanisme upload file
  2. Belajar Servlet Fundamental.
    • Servlet
    • Filter
    • Listener
    • Tidak perlu repot2 belajar JSP
  3. Belajar JDBC. Pastikan Anda tau:
    • Cara connect ke database
    • Cara eksekusi DML
    • Cara menjalankan SQL select
  4. Belajar Database Transaction Fundamental. Pastikan Anda tau:
    • Syarat-syarat untuk mengaktifkan transaction
    • Local vs Managed Transaction
    • Programmatic vs Declarative Transaction
    • Transaction Isolation Level
    • Transaction Propagation

Untuk tahap pertama, itu dulu saja.

Kalau sudah ngerti itu, bisa dengan mudah memahami:

  • Web framework apapun (Spring MVC, Struts 1 dan 2, Java Server Faces)
  • Database abstraction framework seperti Spring JDBC, iBatis, dan Hibernate.

Tahap Kedua

Tahap kedua ini relatif rumit. Karena itu, untuk tiap materi, pastikan:

  • Anda tau masalah yang mendasari munculnya teknologi ini.
  • Anda tau cara memecahkan masalah tersebut dengan teknologi ybs.
  • Anda tau keterbatasan dari teknologi ybs.
  • Anda tau alternatif solusi selain menggunakan teknologi ybs
  1. Remote Method Invocation
    • Mekanisme remote invocation
    • Mekanisme rmiregistry
    • Cara membuat remote object
    • Cara mempublish remote object
    • Cara membuat client yang mengakses remote object
  2. Java Messaging Service (JMS)
    • Arsitektur Messaging
    • Point to Point vs Publisher - Subscriber
    • Bedanya Durable dan Non-Durable Subscriber
    • Cara mengirim message
    • Cara menerima message
  3. Enterprise Java Bean
    • Stateless Session Beans
    • Stateful Session Beans
    • Message Driven Beans
    • Entity Beans dan evolusinya dari versi 2 sampai versi 3.

Kalau sudah menyelesaikan tahap 2 ini, seharusnya Anda akan mudah memahami Seam Framework dan bisa menggunakan sebagian besar fitur dari application server Java (seperti Glassfish, Geronimo, JBoss AS, IBM Websphere, Oracle iAS, BEA Weblogic, dsb).

Selain itu, masih ada tahap ketiga, yaitu urusan lain-lain seperti JMX, dan teman-temannya. Tapi saya yakin kalau sudah lulus tahap dua, sudah tidak bingung lagi mau belajar apa.

Daftar di atas memang cukup menggetarkan hati. Sebagai gambaran, saya sendiri butuh waktu satu tahun lebih untuk memahami itu semua.

Tapi jangan khawatir, kalau Anda mulai hari ini, berarti tahun depan sudah menguasai. Kalau menunda belajar, bukan saja akan lebih lama selesainya, tapi juga materinya akan lebih banyak. Framework integrasi ala OSGi dan fitur baru Java 7 seperti Closure sudah di ambang pintu.

Mulailah dari sekarang !!!


Kutu Loncat

Di milis Java sedang ribut urusan gaji programmer. Topik ini adalah topik abadi. Sepanjang hidup saya di milis ini, paling tidak urusan gaji dibahas setahun dua kali. Kadang-kadang lebih sering.

Kita tidak akan membahas tentang urusan gaji … mungkin nanti di posting berikutnya. Kita akan membahas tentang fenomena pindah kerja terlalu sering, a.k.a kutu loncat. Menurut salah seorang komentator, programmer Java cenderung kutu loncat.

Sedikit informasi latar belakang, sejak lulus di tahun 2001 sampai 2008 ini, saya sudah kerja di 7 perusahaan berbeda. Kalau dirata-rata, berarti tiap tahun pindah kerja. Saat ini saya membangun perusahaan sendiri. Jadi saya akan bahas dari sudut pandang karyawan, dan juga pemilik perusahaan.

Sudut Pandang Karyawan

Sebagai karyawan, pindah kerja itu hal yang biasa. Yang penting jangan terlalu sering, dan menggunakan sopan-santun yang benar.

Kalau kita terlalu sering pindah kerja, misalnya setahun 3 kali (berarti rata-rata 4 bulan), kita akan mengalami beberapa kesulitan.

Kesulitan pertama adalah dilema dalam mengupdate CV. Apakah 3 perusahaan tersebut akan kita tulis atau tidak? Kalau ditulis, HRD akan bertanya-tanya, ada apa dengan kandidat ini? Kok dalam satu tahun sudah pindah 3 kali. Terlalu menuntut, rewel, atau apa? Kalau tidak ditulis, HRD akan bertanya kenapa kandidat ini pengangguran beberapa bulan?

Kesulitan kedua, waktunya akan habis untuk masa transisi. Untuk bisa efektif, seorang karyawan butuh 1-2 bulan penyesuaian. Kalau kita resign, butuh waktu 2-4 minggu untuk transfer knowledge ke penerus kita. Kerugian di kita juga, kita tidak bisa mengakumulasi pengalaman.

Bagaimana sopan santunnya? Mudah saja:

  1. Beritahukan sedini mungkin. Idealnya 1 bulan, kalau tidak bisa ya minimal 2 minggu sebelumnya

  2. Selesaikan semua tanggung jawab dan hutang (kalau ada)

  3. Lakukan proses handover dengan benar

Kapan kita pindah kerja?

Menurut saya, bila:

  • Pekerjaan kita sudah tidak lagi membuat kita tambah pintar

  • Kompensasi yang kita terima tidak sebanding dengan kontribusi yang kita berikan

  • Ada tawaran yang minimal 50% lebih besar (annually, bukan monthly). Kalau lebih sedikit dari itu, tidak sebanding dengan kerepotan pindah kerja.

Sudut Pandang Perusahaan

Kalau karyawannya bagus, perusahaan akan rugi kalau dia resign, karena:

  • butuh waktu untuk rekrutasi

  • butuh waktu untuk training

  • butuh waktu untuk handover/transisi

Oleh karena itu, perusahaan harus berusaha mempertahankan karyawannya yang bagus. Apalagi untuk software development company. Komputer rusak gampang diganti, tapi top developer resign, urusannya jauh lebih kompleks. Keseluruhan daya saing perusahaan terletak pada otak karyawannya.

Untuk sudut pandang perusahaan, saya akan lebih fokus tentang bagaimana sudut pandang yang benar dalam memandang karyawannya.

Selalu berikan training. Training ini adalah untuk memastikan karyawan tersebut melakukan tugasnya dengan benar. Saya pernah dengar kutipan berikut, “Train your employee and risk they leave, or not train your employee and risk they stay”. Arti kutipan di atas, resiko kita bila memberikan training adalah bila karyawan resign, kita rugi biaya training. Sebaliknya, bila kita tidak memberikan training, kita menanggung resiko bila karyawan tersebut tidak perform dan tak kunjung resign.

Kesalahan besar yang lainnya, berkaitan dengan training, menganggap karyawan yang otodidak tidak butuh training. Ini pandangan yang sempit, menganggap bahwa training hanyalah sarana menambah knowledge belaka.

Training, apalagi external training, memiliki benefit lain disamping menambah pengetahuan:

  1. Memperluas wawasan

  2. Memperluas pergaulan

  3. Menimbulkan sense-of-significance dalam karyawan. Perasaan bahwa dia tidak semata diperah, tapi juga dibesarkan. Perasaan bahwa perusahaan peduli dengan peningkatan kemampuannya. Urusan bahwa materi tersebut bisa dipelajarinya sendiri tidaklah penting.

Evaluasi kompensasi vs kontribusi secara periodik. Karyawan yang baik kemampuannya akan cepat meningkat. Hari ini baru bisa Java Fundamental, enam bulan kemudian sudah mengerti Spring Framework. Peningkatan kemampuan jelas mengimplikasikan peningkatan market-value si karyawan.

Perusahaan harus memastikan bahwa dialah yang pertama mengetahui peningkatan kemampuan tersebut, dan kemudian mengapresiasinya. Di kantor tempat saya bekerja sebelumnya, banyak orang-orang hebat, yang kehebatannya baru disadari perusahaan setelah orang tersebut resign. Sungguh suatu kesia-siaan yang besar. Saya tidak tahu apakah perusahaan tidak bisa mengenali orang hebat, tidak mau mengapresiasi orang hebat, atau tidak mampu mengapresiasi dengan layak. Yang saya tahu hanya satu, orang hebat satu persatu meninggalkan perusahaan.

Jadi, perusahaan harus selalu mengamati perkembangan karyawannya. Sadari bahwa ulat sudah menjadi kupu-kupu. Kemudian berikan kompensasi yang sesuai.

Kompensasi tidak selalu berimplikasi naik gaji. Banyak kompensasi non-gaji yang bisa digunakan, diantaranya:

  • menambah jatah cuti

  • mengirim karyawan ikut event

  • mengikutkan karyawan pelatihan

  • mendorong karyawan ikut dalam kegiatan komunitas

  • mengupgrade komputernya

  • dan masih banyak teknik lainnya, asal Anda kreatif saja.

Kesalahan berikutnya, perusahaan, terutama startup, sering menganggap karyawan ber-etos kerja seperti founder. Karena foundernya kerja 10 jam sehari tanpa lembur, maka dianggap karyawannya juga akan rela melakukan hal serupa. Kalau foundernya Sabtu Minggu ngantor dengan gembira, dianggapnya karyawan juga harus ngantor di masa weekend sambil tersenyum. Bila client telat bayar, karyawan diharapkan akan mengerti.

Ini pemahaman yang salah. Karyawan tidak memiliki keterkaitan emosi terhadap perusahaan sekuat foundernya. Mereka punya kehidupan sendiri dan cita-cita sendiri. Perusahaan harus adil, kalau kerja lembur, berikanlah apresiasi yang sesuai. Berikan uang lembur, atau tambahkan jatah cutinya.

Sebagai penutup, saya menganggap perusahaan IT sama seperti klub sepakbola profesional, seperti Inter Milan atau Arsenal. Posisinya di klasemen, kekayaannya, jumlah fansnya, semua terutama ditentukan oleh siapa pelatihnya, dan siapa pemainnya. Tidak memperhatikan karyawan adalah langkah pertama menuju kegagalan.


Kandidat Java vs PHP

Disclaimer : kondisi dan pengalaman Anda SANGAT MUNGKIN BERBEDA. Jadi jangan bilang saya salah … ini pengalaman pribadi. Pengalaman Anda boleh saja berbeda, dan sangat dianjurkan untuk sharing.

Belakangan ini banyak yang nyari Programmer PHP yah :-d

Demikian tanggapan moderator milis JUG-Indonesia.

Saya mau sharing pengalaman sedikit tentang rekrutasi ArtiVisi beberapa hari yang lalu. Rate salary di lowongan kemarin itu 2-3 juta rupiah, looking for PHP Programmer.

Ternyata, dengan rate salary segitu, para kandidat sudah mampu ‘melaju ke babak playoff’. Begini maksudnya.

Kalau interview, saya selalu mengajukan pertanyaan yang makin lama makin sulit. Job seeker, perhatikan ini, Endy’s interview style.

  • Urusan coding standar. Percabangan dan perulangan.Misalnya:
    • tampilkan nama anda sebanyak jumlah hurufnya. Kalau namanya Endy, tampilkan endy endy endy endy. Kalau namanya Dhiku, tampilkan dhiku dhiku dhiku dhiku dhiku.
    • dengan input bulan dan tahun, buat function/method untuk menghitung jumlah harinya
  • Topik-topik populer
    • HTML syntax
    • Tableless layout with CSS
    • SQL Injection
  • Setelah itu masalah yang membutuhkan imajinasi, misalnya perbedaan pass by value dan pass by reference

  • Kalau masih lolos juga, matakuliah CS yang biasanya bikin ngantuk
    • Struktur Data
    • Algoritma tingkat menengah (tree, sorting, dsb)
    • Automata / Finite State Machine 5. Baru kemudian pertanyaan tentang wawasan
    • Primary Operating System, dan Secondary OS, yang biasa digunakan

Cuma pernah pakai Windows??? Hmm … terima kasih atas waktunya, nanti akan saya hubungi lagi. Tidak pernah pakai OS selain FreeBSD?? Hmm … menarik juga … mari kita tanya lebih lanjut,

Kamu sekolah TK di mana?

Saya pernah posting tentang kandidat ideal menurut saya di sini.

Lalu banyak yang berkomentar tentang betapa sulitnya persyaratan tersebut.

Nah …kembali ke pertanyaan Joshua … kenapa sekarang banyak cari PHP Programmer?

Well … berdasarkan pengalaman saya, dengan tawaran 2-3 juta, para kandidat programmer PHP ini umumnya mampu sampai pertanyaan 3. Beberapa ada yang bisa jawab sampai nomer 4. Belum ada yang sampai 5.

Bagaimana dengan koleganya, kandidat programmer Java? Menyedihkan …. Bahkan no 2 pun banyak yang gak bisa jawab. Fresh graduate Java programmer, berdasarkan survei yang tidak serius dan tidak bisa dipertanggungjawabkan metodologinya, apalagi hasilnya, menyatakan bahwa mereka mengharapkan gaji setidaknya 3-4 juta.

Jadi … kalau saya punya budget 3-4 juta, lalu buka lowongan, bandingkan apa yang akan saya peroleh.

** PHP Programmer **

  • Berpengalaman 2-3 tahun, sudah tahu sopan santun kerja di kantor
  • Bisa HTML
  • Bisa CSS, lengkap dengan div, span, bisa bikin table-less layout
  • Bisa AJAX, low level lagi pakai prototype.js atau whatever library JavaScript yang sedang trend
  • Ngerti konsep HTTP request-response, session, cookie, upload file, dan urusan remeh-temeh HTTP lainnya
  • Kalau beruntung, mungkin bisa dapat yang ngerti SOAP segala
  • Hey, 4 juta cukup mahal … coba kita lihat mungkin dia ngerti Photoshop juga :D

** Java Programmer **

  • Fresh graduate, masih bergaya mahasiswa
  • Ngerti HTML seadanya, belum tentu ngerti perilakunya frameset
  • Gak bisa CSS, apalagi table-less layout
  • Forget about AJAX
  • Forget about low-level HTTP, servlet mapping di web.xml aja belum tentu ngerti
  • SOAP?? Buat mandi??
  • Photoshop atau Corel Draw .. hmm .. itu kan kerjaannya Web Designer. Saya gak ikut-ikut.

Nah …. lalu apa pesan moral dari artikel ini?

  1. Freshmen Java harus lebih tahu diri. Kerjakan PR dulu baru apply. Dengan kondisi seperti di atas, saya lebih suka mempekerjakan PHP programmer lalu diajari Java
  2. Industri PHP harus lebih mengapresiasi komunitasnya
  3. Sebagai company-owner, harus tahu kondisi di berbagai dunia