Preprocessing gene expression dataset Given a gene expression dataset with 99 samples and 10000 features, it is required to find clusters of samples in the dataset. 
Now taking the features and finding their means and subtracting those means from each feature is not the same as taking the samples, finding their means and subtracting these means from each sample.
So what is the proper way: should we normalize the features or the samples?
 A: Strictly speaking - there is no proper way to do this. It depends on your problem and more specifically - what you know about your dataset and what you are trying to achieve.
If, for example, in your type of dataset each sample can have different mean for technical reasons, like the amount of DNA used to measure gene expression, then subtracting the mean from each sample would make them more comparable to each other. However this procedure also carries a downside: it might be unreasonable for you to assume that the total amount of expression is the same in all samples.
On the other hand subtracting a mean from each feature (gene expression) would force all genes to have the same average level of expression. As a preprocessing step for the dataset - this in most cases is more unreasonable than subtracting means from each sample. However it might be done as a first step before applying some other procedure, like principal component analysis.

Now you specifically want to find the clusters of samples. It depends on how you will do this, but you will probably have to find distances between each pair of samples. So in this case:


*

*Subtracting the means of each sample will make it so that the average gene expression within a sample have no influence on the output of your clustering result. This can be done to remove technical noise. But can also reduce real differences between samples. If you suspect technical noise to have a bigger influence on average sample expression compared to real differences - subtracting the mean is probably a reasonable step.

*Subtracting the means of each feature will make it so that the differences in average expression between genes will have no effect on your clustering result. After this each gene will carry a more similar weight to the final between-sample distance measure. And would reduce the "background" similarity in cases where the average expression of each gene is very similar across all samples.
A: Be aware that "normalization" has different meanings. I assume that you want to "center" the data distribution around some reference point (regardless the fact that the distribution is actually normal in shape).
In my lab we sometimes "normalize" gene expression data by subtracting the median across all samples (i.e. we calculate the median expression level of gene A across all samples, and then we subtract it from gene A in sample1, sample 2, etc.). This way, expression of gene A will be > 0 in over-expressed samples, and < 0 in under-expressed samples. We do this for visualization purposes only (e.g. for plotting a heatmap).
Another option would be calculating the mean (or median) of the control samples only, so gene expression will be centered around what is considered normal for healthy untreated individuals.
