Perangkat lunak mengacu pada sistem operasi komputer itu sendiri, serta program dan aplikasi yang dirancang untuk berjalan di komputer. Pengembangan perangkat lunak adalah perancangan dan penulisan perangkat lunak, termasuk pengembangan arsitektur program dan antarmuka pengguna dan pemrograman kode sumber. Proses pengembangan perangkat lunak adalah pendekatan yang diambil untuk pengembangan perangkat lunak, dan ada banyak model yang dikembangkan dengan baik untuk proses ini. Secara umum, mereka berisi variasi pada fase melakukan analisis persyaratan, menentukan produk, membuat arsitektur perangkat lunak, menerapkan kode, menguji dan mendokumentasikan produk, memberikan pelatihan dan dukungan, dan memelihara dan meningkatkan rilis. Model mana pun yang digunakan, proses pengembangan perangkat lunak terkadang ditujukan untuk pengembangan produk baru, sementara di lain waktu difokuskan pada revisi — misalnya, ketika rilis poin dibuat untuk memperbaiki bug — dan di lain waktu, mungkin menjadi persiapan untuk versi baru dari perangkat lunak yang ada, menambahkan fitur yang signifikan serta menawarkan perbaikan bug.
Model Waterfall untuk proses pengembangan perangkat lunak adalah model awal dan juga model dengan keterbatasan bawaan. Ini mengatur pendekatan pengembangan satu arah yang ketat, bergerak satu arah melalui urutan fase pengembangan perangkat lunak, tanpa pernah kembali ke tahap sebelumnya atau mengubah spesifikasi, setelah pengembangan dimulai. Model Spiral, sebaliknya, menggunakan proses berulang, di mana urutan persyaratan, diikuti oleh desain, implementasi, dan akhirnya pengujian diikuti oleh siklus kedua di mana lebih banyak fitur dan komponen ditambahkan. Dalam Model Agile dari proses pengembangan perangkat lunak — yang ada beberapa — proyek pengembangan dibagi menjadi subset selama seminggu hingga sebulan yang disebut kotak waktu, yang masing-masing melewati versi mini dari seluruh proses pengembangan perangkat lunak, termasuk rilis di tamat. Fitur lain dari pengembangan Agile termasuk kedekatan tim yang berkolaborasi dan penggunaan pelanggan untuk merespons produk selama proses berlangsung.
Proses pengembangan perangkat lunak mungkin sangat berbeda untuk perusahaan besar dan untuk programmer individu. Misalnya, penerbit perangkat lunak komersial, seperti Sibelius Software®, bagian dari Avid Technology®, mungkin menghabiskan beberapa tahun pada proses pengembangan perangkat lunak untuk setiap versi dan merilis aplikasi perangkat lunak berukuran ratusan MB dan digunakan oleh ribuan orang. . Di sisi lain, individu seperti Roman Molino Dunn, The Music Transcriber®, memprogram plug-in sebagai tanggapan atas keinginan seseorang bahwa dia dapat melakukan sesuatu yang berbeda dengan perangkat lunak komersial, dapat membuat perangkat lunak berukuran 4 kb dalam waktu satu jam setelah memiliki ide, dalam kasus yang ekstrim.