TE
TechEcho
Home24h TopNewestBestAskShowJobs
GitHubTwitter
Home

TechEcho

A tech news platform built with Next.js, providing global tech news and discussions.

GitHubTwitter

Home

HomeNewestBestAskShowJobs

Resources

HackerNews APIOriginal HackerNewsNext.js

© 2025 TechEcho. All rights reserved.

Paradoxes of Software Architecture (2012)

65 pointsby jmgtanover 10 years ago

5 comments

AnimalMuppetover 10 years ago
Extreme Programming had this idea of doing &quot;the simplest thing that could possibly work&quot;. Don&#x27;t get hung up on lots of architecture or design; make something simple that works. But of course, that doesn&#x27;t work for long - the requirements get more sophisticated, and the simplest thing no longer works. Then you have to refactor&#x2F;redesign&#x2F;rearchitect. And that&#x27;s OK, <i>because now you know which direction to do it in</i>. But don&#x27;t do more than you need for now, because you don&#x27;t know which direction to do &quot;more&quot; in.<p>Design up front for reuse is, in essence, premature optimization.
评论 #8559137 未加载
评论 #8562944 未加载
评论 #8561027 未加载
Joeriover 10 years ago
Interesting to think that complexity can be a result of trying to do proper software architecture. It occurs to me that the way software is typically built probably approaches the problem of complexity in software architecture from the wrong end. We try to build software systems that minimize complexity, have predictable behavior and operate under controlled conditions. Most software has extremely low tolerances for aberrant behavior.<p>Looking at biological systems though, that is the opposite of how reliable systems are constructed. If we design from the assumption of failure and runaway complexity, with watchdog and recovery processes, and using emergent behavior from small discrete components to obtain large-scale results, then we can build software components that are much better able to recover from unexpected interaction and produce more reliable systems. It seems to me that this is what the theory should be. I just have no idea how to do that in the real world when building a web app, aside from recycling server processes every now and then.
评论 #8562803 未加载
评论 #8558798 未加载
评论 #8558768 未加载
ewestover 10 years ago
The article references a paper from 1980 called &quot;On Understanding Laws, Evolution, and Conservation in the Large-Program Life Cycle&quot;. I just skimmed it - incredible insights that continue to be relevant.
评论 #8558205 未加载
ExpiredLinkover 10 years ago
The current trend in software architecture is called &quot;Sacrificial Architecture&quot; by Fowler: <a href="http://martinfowler.com/bliki/SacrificialArchitecture.html" rel="nofollow">http:&#x2F;&#x2F;martinfowler.com&#x2F;bliki&#x2F;SacrificialArchitecture.html</a> .<p>You don&#x27;t even try to &quot;evolve&quot; software but periodically rewrite it which &quot;solves&quot; the &quot;Paradoxes of Software Architecture&quot; in one fell swoop. Disposable instead of durable software.
评论 #8559456 未加载
评论 #8559486 未加载
评论 #8560851 未加载
评论 #8559179 未加载
评论 #8559118 未加载
collywover 10 years ago
I have been having similar thoughts recently. Someone we work with was demonstrating some module he had built. My boss asked if he could make it do something. He explained he could make it do that, but didn&#x27;t want to as it would break the loose coupling he had developed. Loose coupling is nice to have but surely functionality should come first if it is needed.