When series and parallel run out
Put two batteries in different branches of a multi-loop network and the tidy 'collapse it to one resistor' trick breaks down — there is no way to see the whole thing as purely series or purely parallel. We need a completely general method, and it comes from two ideas you already trust: charge is conserved and energy is conserved. Gustav Kirchhoff turned them into two circuit rules in 1845.
The junction rule: charge in = charge out
Kirchhoff's junction rule (his first law) says that at any junction where wires meet, the total current flowing in equals the total current flowing out. Charge cannot pile up or vanish at a point — this is nothing more than conservation of charge restated for a circuit.
At every junction, currents in equal currents out — charge is conserved.
The loop rule: energy around a loop
Kirchhoff's loop rule (his second law) says that if you walk once around any closed loop and add up every potential change — up across batteries, down across resistors — you must return to where you started, so the changes sum to zero. A charge that goes around and comes home has neither gained nor lost net energy; this is energy conservation.
Around any closed loop the algebraic sum of potential changes is zero — energy is conserved.
A systematic five-step method
Worked example: a two-loop, two-battery circuit
Two branches each carry a battery up to a top node a, and a third branch returns to the bottom node b through a resistor. Branch 1: \varepsilon_1 = 12 V with R_1 = 4\,\Omega. Branch 2: \varepsilon_2 = 8 V with R_2 = 2\,\Omega. Branch 3 (the shared return): R_3 = 4\,\Omega. We want the three branch currents I_1, I_2, I_3.