And by architect, I mean how do you avoid bubble-ups from core code in the trading world affecting everything downstream across all the various interfaces you use to trade? I know the obvious answer, but everyone knows the obvious answer and yet it seems unavoidable that small feature changes eventually require recompilation and redesign across the board. In the boring software world, it was okay to use stuff like COM and upgrade interfaces and such; however, given that performance is very important, there's less incentive to use COM-style interfaces building all the various components. What I find is that "old assumptions" can dog new trading systems as code evolves, and rewrites are expensive, time consuming, and error prone. And feature-bloat isn't something you can address just by playing games with compile-time preprocessor defines. Or, let's rephrase the question a bit -- say you bought into the popular technique of the day, is it unavoidable then that in 5 years time that you are locked into the old technique of yesterday? At what point do you call it a day and do a rewrite?