Rather than relying just on partitions, under Linux I usually recommend using LVM. This allows you to grown and shrink filesystems as needed later (though growing tends to be easier than shrinking), even wile the file system is active in the case of ext2/3/4 (I've successfully increased the size of filesystems while they were active, though I've never tried to decrease the size of one this way).
Obviously this still leaves you to decide how to apportion the space, but you don't have to get it exactly right from the get go because rearranging things later is easier. I usually give each volume as much space as I think it will need plus a chunk for good luck, and leave the remaining space for adding new filesystems or expanding existing ones into later.