In our store we have only flat fee shipping. However our product range is huge so it would be unfair to have the same shipping on all products.
This is where shipping classes come in.
The idea is simply to create classes and assign them for products, so you can have different flat fee shipping depending on what kind of product.
Or you could also do it per category which inherits shipping cost on all products automatically.
If there are more than two different classes, you could decide in settings which one to apply. The lowest or the highest.
If you have free shipping on several products they will be free shipping until you add another product with shipping cost.