I'm trying to do a hard surface mesh (Not sure if it's considered a hard surface) and I'm getting this bad shading.
I've applied WeightedNormal modifier and it didn't help. It's good to mention that everything is kept in quads. Normals are recalculated and there are no Custom Split Normals Data on the mesh. Also, there are no Doubles on the mesh.