What I consider as important points in ATS development:
1. Don't try and learn programming yourself - unless it is for basic tasks which can be implemented in VBA and the like. If your plumbing needed attention and it was a complex task most people would call a plumber.
2. In order for a programmer to get an ATS to do what you want - he needs to understand it. Most programmers dont have access to the markets, necessary funds, or the inclination to trade. Find an intelligent, recommended person you can trust to develop your system - and explain it to them well.
3. Be prepared to give constant input to a developer - and continually check that the developer understands what you need. If you are not willing to do this, you may end up with what the developer thinks is a fantastic system - but is completely useless for trading.
4. Never insist that all code is written in C++ or a specific language. Hire a developer with a good enough skills base to decide on the best programming language for the task at hand. A fast C++ system may take a year to develop, whereas a C#/.NET implementation may take 3 months.
5. If you a getting a contractor/contracting company to do the work for you, be sure to check if the contract includes rights to source-code, or if you need to purchase source code at an additional premium.
6. Always prefer off-the-shelf solutions than developing your own system. However, always check that the solution works and can be extended to meet all future requirements before purchasing.
7. Speed costs - above anything else, writing fast, scalable, multithreaded software is difficult, costly and should only be tackled by people who have the resources to tackle the problems that will occur.