ICOs should be held over several weeks and have a daily coin emission. This way whales cannot buy up all of the tokens all at once.
Bitshares had a great template for ICOs but no one followed it. The BTS ICO was held over 1 month (I think) where every day 3 million coins were sold. Each new day another 3 million coins were on the auctioning block. If you wanted to invest say 30 BTC then the best way to get the most coins would be to invest 1 BTC every day of that month and get your chunk of coins for that day. One could also watch the sale and try to snipe more coins by waiting it out and sending BTC on a day that sees low activity.
I thought this was the best approach to any ICO I have seen.
Wish there were more solutions like this than complains. Too much complainings bore the hell out of me. It's should not always be about money. People need to also proffer solutions otherwise this great forum will lose its value