When choosing a technology stack I look to Southwest Airlines for inspiration. I might sound strange but more people should embrace the Southwest model. As an airline, they only have 1 type of plane and tries to keep things as simple as possible. So instead of building some of your products in Ruby, other parts in Python, and another part in Erlang; it is better to just stick with one or two core technology. The rationale behind this is to reduce context switching, reduce errors and bugs that occurs at the crack of technology systems, make it easy to train and onboard other people to your project, and make it easier for yourself to maintain it over the long run. My rule of thumb is that software is maintained and read more often than it is written so now I tend to take much longer to write software because I have to think about how people would read it. For every 2 days of coding, I spend about 1 day of refractoring and I do this religiously to keep the technical debt low.