I'm no pro, but the algorithm that I usually use is as follows:
Is the city's defensive rating close to the offensive rating of my troops?
Oh Yes
Example: City with a defense of 14 vs (Longswordsmen (21) & Crossbowmen (18 ranged))
The combat values are above the city defense value! I should be able to take this city easily, with few units and no losses.
Yes
Example: City with a defense of 20 vs (Longswordsmen (21) & Crossbowmen (18 ranged))
The combat values are close to the city defense value. I should be able to overwhelm the city without siege weapons with few losses.
No
Example: City with a defense of 29 vs (Longswordsmen (21) & Crossbowmen (18 ranged))
The combat values are below the city defense value. I need to bring at least 1-2 siege weapons and I should prepare for some losses.
Oh No
Example: City with a defense of 38 vs (Longswordsmen (21) & Crossbowmen (18 ranged))
The combat values are waaay below to the city defense value. I need to bring at least 3-5 siege weapons and I should prepare to lose 1-2 units per turn. How did I get in this situation?