How to derive the nuclear spin of 23Na?
The nuclear shell model is a useful "first approach" to determining nuclear spin.  It doesn't always work, but it is a relatively simple way to make a first attempt.

Here is a nuclear shell energy diagram.  As you can see it is somewhat analogous to an electron orbital energy diagram.



A set of shells are filled by neutrons and a separate set is filled by protons.  The protons will pair when possible, same applies to the neutrons.  Notice that shells with J=1/2 hold 2 nucleons (a nucleon can be either a proton or a neutron), shells with J=3/2 can hold 4 nucleons, shells with J=5/2 can hold 6 nucleons, and so on.  This is because the shell with (for example) J=5/2 has 3 sub-shells: J=5/2, J=3/2 and J=1/2, each capable of holding 2 nucleons.  Higher J sub-shells are "usually" filled first.

Let's apply this model to a few examples.

$\ce{^2H}$ (deuterium): 1 neutron, 1 proton; the neutron goes into the neutron $\ce{1s_{1/2}}$ shell and is unpaired, spin = 1/2; the proton goes into the proton $\ce{1s_{1/2}}$ shell and is unpaired, spin = 1/2; total nuclear spin = 1/2 + 1/2 = 1

$\ce{^{17}O}$: 9 neutrons, 8 protons; the first 8 neutrons go into the neutron 1s and two 1p shells and are all paired, the 9th neutron goes into the neutron $\ce{1d_{5/2}}$ shell and is unpaired, spin = 5/2; all 8 protons are paired in the 1s and two 1p shells, spin = 0; total nuclear spin = 5/2 + 0 = 5/2

$\ce{^{23}Na}$: 12 neutrons, 11 protons; the first 8 neutrons go into the neutron 1s and two 1p shells and are all paired, the last 4 neutrons go into the neutron $\ce{1d_{5/2}}$ shell and each set of two is paired, spin = 0; the first 8 protons fill the proton 1s and two 1p shells and are all paired, the next 2 protons go into the $\ce{1d_{5/2}}$ J=5/2 sub-shell and are paired, spin = 0, the last proton goes into the $\ce{1d_{5/2}}$ J=3/2 sub-shell and has spin 3/2; total nuclear spin = 0 + 3/2 = 3/2