BI is correct; like everything else in this game, you must tailor your responses to the threats.
If the city's perimeter is wooden then a ballista and some rams will do the trick. Just put the ballista on the towers, then on the gate. Put the rams (2 or 3) at wide intervals on the wall. Wait until all points are breached and your troops are ready before assaulting.
If the city has a stone wall I find the following works well: Get some onagers (2-6) and rock the crap out of the barbican, towers, and gate. Build a few sapper points (3-5) and put your light infantry on them post haste. If you think things'll get dicey, send cavalry or heavy infantry for support. When the onagers have blasted the barbican, towers, and gate to smitherines and the sappers have razed all breach points in the walls, THEN send in your troops, full force and simultaneously.
The trick to a siege is assaulting on multiple fronts. That's why cavalry can be such a valuable asset. Never EVER launch your assault until all sapper's breaches have been achieved/rams have punched in their holes/onagers have demolished their targets. Have patience and wait for all your gaps to be opened then throw your troops through them all; overwhelm and surround your enemy. Cut them off, ride them down, intercept them, but most importantly, hit them as two fists (or more) at once.
But onagers can be detrimental in their cumbersome gaits so if you're traveling across extremely hostile land don't bother with them. They come in handy but they can cause trouble for you too. I love them personally, but that's just me.
So, to answer your question: I believe in both. Onagers work on fortifications, on-site siegecraft work on walls. They are both essential (for me).
"All right, but apart from the sanitation, medicine, education, wine, public order, irrigation, roads, the fresh water system and public health, what have the Romans ever done for us?"
"Sometimes, a view from sinless eyes,
Centers our perspective and pacifies our cries..."