* Space vs. Speed
– Most famous one. (Memory space vs. execution speed) – details are omitted.
* Modularity vs. (Performance & Space)
– Well-designed-module should be stable. To be stable, there may be lots of ‘parameter check’, ‘condition check’, ‘sanity check’ and so on. Besides, for the safety reason, it may not trust passed memory space. So, it may allocates it’s own memory space and try to copy data from passed memory to use it. Those make this trade-off. Well-designed-module hides it’s information and stable as it is. But to be like this, it consumes speed and space.
* Abstraction vs. Debugging
– When software is stable, abstraction reduces maintenance costs very much. But, if not, debugging is more difficult than straightforward designed software, especially, to the engineer who are not accustomed to the software.
* low possibility to misuse vs. various and rich functionality
– It is clear…
* Backward-Compatibility vs. Innovation