Agile


11
Oct 09

The Pomodoro Technique

Remember, Time is a greedy player who wins without cheating, every round! –Baudelaire

Inti dari teknik pomodoro adalah bagaimana kita memanage waktu sehingga dapat meningkatkan fokus dan konsentrasi, meningkatkan dan mempertahankan motivasi, meningkatkan kinerja maupun proses belajar.

Konsep yang digunakan sangat sederhana sekali. Pomodoro sejatinya adalah sebuah timer untuk memasak dengan interval 25 menit. Nama pomodoro sendiri diambil dari timer yang berbentuk buah tomat (dalam bahasa italia, tomat = pomodoro).

The Pomodoro Technique

The Pomodoro Technique

Pomodoro tradisional berdurasi 30 menit (25 menit kerja + 5 menit istirahat). Satu pekerjaan dapat membutuhkan waktu lebih dari 25 menit, sehingga membutuhkan lebih dari satu pomodoro. Misal, Anda membutuhkan waktu 60 menit untuk menyelesaikan suatu pekerjaan, maka Anda memerlukan 3 pomodoro. Supaya lebih efektif, karena keterbatasan fisik dan psikologis manusia, sebaiknya Anda melakukan istirahat yang lebih panjang untuk setiap 4 pomodoro, misal 15-30menit.

Ada berbagai teknik atau aturan untuk mengoptimalkan teknik pomodoro, misalnya untuk pekerjaan yang membutuhkan lebih dari 5-7 pomodoro, sebaiknya pekerjaan tersebut dipecah-pecah menjadi sub-sub yang lebih kecil supaya lebih mudah dimanage. Untuk penjelasan yang lebih lengkap tentang pomodoro, Anda dapat membaca buku pomodoro berjudul The Pomodoro Technique [PDF].

Bila Anda bekerja dengan komputer, Anda dapat memanfaatkan beberapa perangkat lunak yang dirancang untuk mempraktekan teknik pomodoro. Pengguna Mac OS dapat menggunakan Pomodoro Desktop, sedangkan pengguna sistem operasi lainnya (termasuk Mac), Windows maupun Linux dapat menggunakan focus booster (butuh Adobe AIR).


5
Oct 09

Berbagai Framework Untuk Behaviour-Driven Development

Behaviour-Driven development (BDD) secara prinsip kurang lebih sama dengan test-driven development (TDD), hanya saja (bila Anda mengembangkan perangkat lunak secara object-oriented) BDD lebih fokus pada pengujian terhadap perilaku suatu objek, bukan mengenai perihal seperti apa objek itu (misal: struktur objek). Ada cukup banyak framework yang dapat kita gunakan untuk mempermudah pengembangan perangkat lunak secara BDD. Bagi yang masih asing terhadap BDD namun sudah pernah mengenal tentang teori BDD, atau siapapun Anda yang merasa tertarik tentang topik ini, ada baiknya untuk mencoba mengimplementasikannya secara langsung dengan bantuan framework yang Anda sukai.

Selamat mencoba BDD. Red – Green – Refactor – Red – Green – Refactor – …

O ya, kalau ada yang tahu framework BDD lainnya, silahkan berbagi melalui komentar di posting ini.


27
Sep 09

Generalizing Specialist

Salah satu masalah besar dalam industri IT adalah spesialisasi skill yang kebablasan. Dalam suatu organisasi, bisa jadi terdapat departemen-departemen yang beranggotakan spesialis basis data, spesialis analisis bisnis, spesialis manajemen projek, spesialis Java/pemrograman, dsb. Pendekatan seperti ini didasarkan pada paradigma bernama Taylorism (Frederick Taylor). Idenya adalah memecah-mecah proses pabrikasi menjadi tahap-tahap yang terpisah, karena hal ini dianggap lebih baik daripada menyerahkan kepada individu yang memiliki banyak kemampuan sekaligus. Taylorism terbukti sukses pada proses manufaktur, tapi tidak demikian untuk pengembangan perangkat lunak.

Masalah yang terjadi dalam pengembangan perangkat lunak, seringkali para spesialis kesulitan dalam bekerjasama dengan spesialis lainnya atau bahkan dengan spesialis yang sebidang. Mengapa demikian? Karena spesialis tersebut tidak memiliki latar belakang pengetahuan yang memadai untuk dapat mengerti masalah yang sedang dihadapi oleh spesialis lainnya, mereka cenderung terlalu fokus dengan bidang yang digelutinya namun celakanya dia mengabaikan hal-hal mendasar lain yang juga penting. Alhasil, hal tersebut menjadi hambatan mereka dalam berkolaborasi.

Apa solusinya? Generalizing specialist (GS). GS adalah seseorang yang memiliki pengetahuan tentang bagaimana suatu sistem secara keseluruhan dapat bekerja. Dia memiliki pengetahuan tentang apa yang sedang dikerjakan oleh rekan kerjanya. Dengan pengetahuan itu, dia akan memberikan apresiasi lebih terhadap pekerjaan rekannya tersebut. Sehingga terbentuk tim dengan kinerja yang baik.

Adalah hal yang hampir mustahil untuk tahu banyak hal dan menguasai semuanya, sedangkan sangat mungkin bila seseorang mengetahui banyak hal dan menguasai secara mendalam beberapa diantaranya.

GS bukan sekedar generalis. Generalis adalah orang yang tahu segala hal tapi tidak satupun yang dia dalami, cuma kulit luarnya saja. Sedangkan GS adalah orang yang tahu banyak hal namun tetap memiliki keahlian khusus yang mendalam pada beberapa hal.

Dalam dunia rekayasa perangkat lunak dengan metodologi agile, semakin sedikit spesialis yang dapat bertahan, mau tidak mau mereka harus melebarkan ilmu mereka.

Kesimpulannya, kita kitak bisa serta merta menyamakan antara industri manufaktur dengan industri IT (pengembangan perangkat lunak), sehingga sistem yang berjalan baik pada industri manufaktur, seperti Taylorism, tidak dapat diadopsi begitu saja ke dalam industri IT. Hal lain yang masih menarik perhatian saya saat ini adalah bagaimana kita mengimplementasikan Lean Software Development, karena Lean berangkat dari industri manufaktur, yaitu pabrik mobil Toyota, namun kini IBM sepertinya telah sukses menerapkan Lean.

Untuk lebih jelas tentang GS, Anda dapat membaca buku “The Object Primer: Agile Model-Driven Development with UML 2.0 Third Edition” yang ditulis oleh Scott W. Ambler.


21
Aug 09

Agile dan Extreme Programming Dalam Kartun Dilbert

Dilbert - Agile Programming

Dilbert - Agile Programming


Dilbert - Extreme Programming (1)

Dilbert - Extreme Programming (1)


Dilbert - Extreme Programming (2)

Dilbert - Extreme Programming (2)


Dilbert - Extreme Programming (3)

Dilbert - Extreme Programming (3)


Sumber: “Dilbert” on Extreme and Agile Programming


21
Aug 09

Beberapa Mitos Seputar Agile

  1. Silver bullet, dapat digunakan untuk menyelesaikan semua permasalahan.
  2. Tidak semua permasalahan dapat diselesaikan dengan agile. Kondisi dan kultur tim juga berpengaruh terhadap keberhasilan penerapan agile.

  3. Dengan agile, kita dapat melakukan apapun sesuka hati, tanpa aturan yang jelas.
  4. Agile membutuhkan kedisiplinan yang sangat ketat dan aturan yang jelas, karena agile didesain untuk menghadapi lingkungan yang sangat dinamis. Tanpa ini semua, agile tidak akan pernah berhasil.

  5. Tidak memiliki perancangan, dokumentasi, arsitektur, dsb.
  6. Seperti metodologi lain pada umumnya, agile juga membuat perancangan, dokumentasi, arsitektur, dsb. Justru semua ini dilakukan secara transparan dan menitik beratkan pada kebutuhan, kecepatan dan kualitas. Memang kadang kala agile menghasilkan dokumentasi yang minimalis, tapi bukan berarti dokumentasi tersebut dibuat minimalis dengan cara mengabaikan banyak hal esensial sehingga tidak dapat merepresentasikan sistem yang dibangun secara komprehensif. Hal ini karena agile selalu berusaha meminimalisir pemborosan tenaga dan waktu, sehingga menghasilkan iklim kerja yang efektif dan efisien.

  7. Menghasilkan produk yang tidak terjamin kualitasnya.
  8. Pengujian (testing) adalah bagian yang krusial pada agile. Salah satu parameter perangkat lunak yang berkualitas adalah perangkat lunak yang telah lolos uji. Pada metode tradisional, pengujian kadang kala malah dianggap remeh dan hanya untuk seremonial semata.

  9. Tidak digunakan oleh perusahaan-perusahaan besar.
  10. Berdasarkan Forrester Research, 14% enterprise di Amerika Utara dan Eropa telah menggunakan agile, dan 19% lainnya tertarik dan berencana untuk menggunakan agile di masa mendatang. Google dan Yahoo adalah dua dari sekian perusahaan ternama yang telah menggunakan agile.

Dan masih banyak lagi mitos seputar agile…


19
Aug 09

Pengantar

Fakta: sebagian proyek perangkat lunak terlambat, melebihi anggaran, dan tidak dapat memenuhi kebutuhan pasar ketika diluncurkan. Sepertinya ini telah menjadi masalah klasik rekayasa perangkat lunak sejak dahulu kala. Apa yang menyebabkan ini? Banyak faktor, salah satunya adalah kesalahan dalam memilih metodologi.

Ada berbagai jenis metodologi yang digunakan dalam rekayasa perangkat lunak, salah satunya adalah agile. Agile development sendiri masih mencakup berbagai metodologi, antara lain Scrum, Extreme Programming, Agile Unified Process (AUP), Feature-Driven Development, Lean Development, Dynamic System Development Method (DSDM), OpenUP, Agile Modeling, Crystal, dsb. Ciri khas dari semua metodologi agile ini adalah sifat iterative dan incremental, hal ini sangat berbeda dengan metodologi tradisional (baca: waterfall). Sebagai catatan, Scrum adalah metodologi (atau lebih tepatnya framework) yang paling banyak digunakan dan paling berkembang hingga saat ini.

Perubahan yang cepat, kebutuhan pasar yang terus meningkat, menuntut untuk menggunakan suatu metodologi yang fleksibel, responsif, adaptif terhadap perubahan, dan terjamin kualitasnya. Agile memberikan solusi terhadap masalah ini, perusahaan besar seperti Google, Yahoo, Microsoft, Cisco, Siemens, Motorola telah mengembangkan agile untuk meningkatkan bisnis dan menjaga supaya perusahannya tetap kompetitif di pasar.

Secara cepat, kini agile mulai beranjak menjadi de-facto standard untuk proses pengembangan perangkat lunak.