The natural tendency of growth is towards specialization. When you only have a few people, they must by necessity do everything. When you have more people, there’s enough room and slack to let people build specialization kingdoms that only they have the keys to. Don’t be so eager to let that happen.
Specialization might give you a temporary boost in productivity, but it comes at the expense of overall functional cohesion and shared ownership. If only Jeff can fiddle with the billing system, any change to the billing system is bottlenecked on Jeff, and who’s going to review his work on a big change?
But it goes even deeper than that. For example, we have all programmers work on-call as well. Everyone gets to feel the impact of customers having trouble with our code (this is on top of Everyone on support).
This really came to the test lately when we started working on a number of iOS and Android projects. Should we hire new specialists in from the outside or should everyone do everything, and thus have our existing team learn the ropes. Well, in that case we ended up doing both. Hiring a little because we needed that anyway, and getting someone with some experience, but also choosing to invest in the existing team by having them learn iOS and Android from scratch.
Good programmers are good programmers. Good designers are good designers. Don’t be so eager to pigeonhole people into just one technology, one aspect of your code base, or one part of your business. Most people are eager to learn and grow if you give them a supportive environment to do so.