Pembangunan vila di Puncak dilakukan dengan menebang pohon-pohon di hutan-hutan daerah tersebut. Akibatnya, wilayah hutan banyak berkurang. Ketika di Puncak turun hujan lebat, air hujan terus mengalir ke bawah karena tidak ada akar-akar pepohonan yang dapat menahan air hujan di dalam tanah. Air hujan terus turun ke dataran yang lebih rendah hingga terkumpul di sungai. Air sungai akan mengalir deras menuju ke laut.
Jakarta berada di dekat laut. Sungai-sungai di Jakarta menerima aliran deras air sungai dari Puncak dan Bogor. Jika sungai di Jakarta cukup besar untuk menampung derasnya sungai, tentu tidak akan terjadi banjir.
Namun, sungai-sungai di Jakarta banyak yang sudah sempit dan dangkal. Selain karena lumpur, sempit dan dangkalnya sungai di Jakarta juga akibat kebiasaan buruk warga yang membuang sampah ke sungai.
Selain itu, tanah terbuka untuk resapan hujan di Jakarta semakin sempit. Banyak lahan sudah berubah menjadi gedung dan disemen. Ketika hujan, sedikit sekali air yang dapat diserap tanah. Sisa air hujan mengalir ke selokan dan berlanjut ke sungai.
Untuk menampung air hujan yang turun di Jakarta saja perlu sungai lebar dan dalam. Apalagi jika ditambah air hujan yang mengalir dari dataran tinggi, seperti Bogor dan Puncak. Oleh karena itu, sungai tidak akan muat menampung semua air itu. Akibatnya, air meluap keluar dan membanjiri Jakarta.