Spin decomposition in general I can turn-the-crank and show that  $\frac{1}{2}\otimes \frac{1}{2} = 1\oplus 0$ etc, but what would be a strategy to proving the general statement for spin representations that $j\otimes s =\bigoplus_{l=|s-j|}^{|s+j|} l$. 
 A: It's easy to prove the formula if you just look at the individual basis vectors of the tensor product. Let's use $(2j+1)$ and $(2s+1)$ eigenvectors of $j^2, j_z$ and $s^2, s_z$ called $|j,j_z\rangle$ and so on.
Now let's ask about the multiplicity of basis vectors of the tensor product with a given eigenvalue of $J_z = j_z+s_z$. The maximum eigenvalue of $J_z$ in the tensor product is $j+s$: it can be obtained if we choose
$$ |J,J_z=j+s\rangle = |j,j\rangle \otimes |s,s\rangle $$
There are no higher eigenvalues of $J_z$; this proves that no representation with $J>j+s$ is included in the tensor product. However, the $J=j+s$ representation must be included exactly once to obtain one basis vector with $J_z=j+s$; representations with lower values of $J<j+s$ wouldn't contribute any vectors with $J_z=j+s$.
So the tensor product 
$$ Rep(j) \otimes Rep(s) = Rep(j+s)\oplus Rep(rest) $$
I have used the fact that reducible representations of simple compact groups may be written as direct sums. Now, what about the remaining representation(s) $Rep(rest)$? It is the linear envelope of a set of basis vectors in which we have already removed all the $(2J+1)$ basis vectors with $J=j+s$.
Well, in the rest, the maximum allowed $J$ is $j+s-1$. From the original bases, we see that the original space was 2-dimensional: the old basis included
$$|j,j-1\rangle \otimes |s,s\rangle, \qquad |j,j\rangle \otimes |s,s-1\rangle $$
But we have already included one combination to $Rep(j+s)$; so the $Rep(rest)$ representation only contains the other one. By the same argument as above, we may see that the multiplicity of $Rep(j+s-1)$ in the tensor product is also one.
By induction, this algorithm may continue: at the beginning, the number of eigenvectors with a given $J_z$ is increasing by one every time we decrease $J_z$ by one. However, this behavior stops once we get to too low values of $J_z$ that would require too negative values of $j_z$, either $j_z<-j$ or $s_z<-s$. When that happens, the number of basis vectors no longer jumps by one; it stays constant. It happens when
$$J_z^{max} \equiv J = |j-s|$$
so $J=|j-s$ is the lowest-$J$ representation included in the decomposition of the tensor product. Another way to see that at this moment, we have already written down all components, is either to notice that $J$ can't be smaller than $|j-s|$ because the minimum is obtained by adding "oppositely directed vectors" and can't be further shortened; or, alternatively, we may check that the dimensions of your formula work:
$$ (2j+1)(2s+1) = \sum_{J=|j-s|}^{(j+s)} (2J+1) $$
A: I think the best way is not the textbook way, but the one described in the warm-up problem in this answer: Mathematically, what is color charge?
I will repeat the main point: the irreducible represenations of SU(2) are given by all complex completely symmetric tensors with all indices down, where each index takes two values 0,1. This is because you have invariant $\epsilon_{ij}$ tensor, which you can use as a metric to raise and lower indices, and you can remove the antisymmetric parts using the $\epsilon$ tensor. The fully symmetric k-index tensor is the spin k/2 representation.
When you tensor two of these together of size k and m, you just put the two tensors end to end, which gives a reducible k+m tensor. You need to remove the antisymmetric parts using the $\epsilon$ tensor, and this steps down by 2 each time, producing exactly one representation of every size between k+m (where you start) and k-m (when you run out of indices to contract).
A: You can solve this by examining characters.  Any finite dimensional representation of $SU(2)$ breaks up into a sum of 1-dimensional representations of $U(1)$, which are classified by an integer called weight (you may divide by 2 to get a half-integer if you need to conform to physics conventions).  You can then write the decomposition of a representation as a generating function, by adding the monomial $q^n$ for each representation of $U(1)$ of weight $n$ that you see.  For example, the representation $\frac12$ corresponds to $q + q^{-1}$, and the representation $1$ corresponds to $q^2 + 1 + q^{-2}$.
The two facts you need are then:


*

*For any non-negative integer $k$, the irreducible representation $k/2$ has character of the form $$\frac{q^{k+1} - q^{-k-1}}{q - q^{-1}} = q^{k} + q^{k-2} + \cdots + q^{-k}$$

*The character of a tensor product is the product of characters.
In other words, the tensor product decomposition can be reconstructed by forgetting the $SU(2)$ action, taking the tensor product of the underlying  $U(1)$ representations, then remembering that the characters of irreducible $SU(2)$ representations have a special form.
In your example, squaring $q + q^{-1}$ yields $q^2 + 2 + q^{-2}$.  You then subtract $q^2 + 1 + q^{-2}$ to get $1$.  For your more general question, you want to show that:
$$\frac{q^{j+1} - q^{-j-1}}{q - q^{-1}}\frac{q^{s+1} - q^{-s-1}}{q - q^{-1}} = \sum_{\ell = |s-j|}^{s+j} \frac{q^{l+1} - q^{-l-1}}{q - q^{-1}}$$
You can prove this by induction on $s$: Your base cases are $s=0$ and $s=1$, which are relatively easy to check.  For larger $s$, you can do a reduction by splitting the sum $\frac{q^{s+1} - q^{-s-1}}{q - q^{-1}}$ as $(q^s + q^{-s}) + \frac{q^{s-1} - q^{-s+1}}{q - q^{-1}}$.  Note that
$(q^s + q^{-s})(q^j + q^{j-2} + \cdots + q^{-j})$ is expanded as $$(q^{s+j} + q^{s+j-2} + \cdots + q^{-s-j}) + (q^{|s-j|} + q^{|s-j|-2} + \cdots + q^{-|s-j|}).$$
These are the extreme summands in $\sum_{\ell = |s-j|}^{s+j} \frac{q^{l+1} - q^{-l-1}}{q - q^{-1}}$.  The remaining summands are what you get by replacing $s$ by $s-2$.
There is also a combinatorial method (which would be easier to communicate if I could draw): view the Laurent polynomial $q^j + \cdots + q^{-j}$ as a set of evenly spaced dots on the number line, and view each of the monomials in $q^{s} + \cdots + q^{-s}$ as a  shifting operator.  You get a bunch of shifted sets of dots, and you can reorganize them into a sort of symmetric pile.  Each layer of the pile is one of the new irreducible representations.
