TE
科技回声
首页24小时热榜最新最佳问答展示工作
GitHubTwitter
首页

科技回声

基于 Next.js 构建的科技新闻平台,提供全球科技新闻和讨论内容。

GitHubTwitter

首页

首页最新最佳问答展示工作

资源链接

HackerNews API原版 HackerNewsNext.js

© 2025 科技回声. 版权所有。

Hidden Costs That Engineers Ignore

163 点作者 gsands超过 10 年前

12 条评论

mrlyc超过 10 年前
What worked for us was to do two versions of the program at the same time.<p>Version one had simple functionality. Version two had all the bells and whistles dreamt up by the programmers and the customer while we were working on version one. Those were added to a todo list for version two. They were not implemented in version one.<p>That kept up the flow of ideas but didn&#x27;t disrupt the project. It made the programmers feel appreciated while giving us an outline for the next version so our competitors couldn&#x27;t keep up.<p>What surprised me was that the whole team got into the spirit of the thing. When someone came to me with an idea, cries of &quot;Version two! Version two!&quot; echoed around the programming room.
评论 #8822673 未加载
评论 #8822484 未加载
jonpress超过 10 年前
The problem is that as requirements grow, class structures are often kept the same but the &#x27;glue logic&#x27; which operates on these structures becomes increasingly complex (you have to handle a growing number of edge cases).<p>There is a point where the glue logic becomes very complex (and brittle) - At that point, the best thing to do is to redesign part of the system&#x27;s class structure.<p>If your components (at all levels of your class hierarchy) are specific about their own behaviors, it means that you can use simpler glue logic to make them work together.<p>When you need to handle a lot of complex use cases, it&#x27;s often useful to have many specific classes which share the same interface and can be used interchangeably.
评论 #8823821 未加载
saosebastiao超过 10 年前
Unfortunately, sometimes the simpler system is the one you don&#x27;t yet understand, and the more complex system is the one you can create on your own using tools you do know. This is the reason we still see homegrown business rule systems despite the fact that they were pretty much perfected them by the late 70s, with several open source implementations as of the late 90s. It is also the reason you still see deadlocks and race conditions in parallel code. And it is the reason you see matrix factorizations using hadoop map reduce instead of MPI.<p>And when these bullshit foundational design decisions are made, the &quot;improvements&quot; that the engineers make to the system later are almost always a reduction in fidelity to the real world process that is being modeled, instead of a move toward a system that drastially simplifies your system while simultaneously improving fidelity to the real world but might mean you have to read a wikipedia article for a few minutes.
wavegeek超过 10 年前
There is a good book about this. It changed my thinking about complexity. The key insight is that if you don&#x27;t manage complexity you will drown in it. Complexity is OK as long as it really earns its keep. And a lot of complexity is not worth it. (I speak as a person who just spent 20 hours - less than the IRS&#x27;s estimated 30 hours - filling in form W-8IMY for the IRS, a form which started as a bright idea by someone in congress).<p>&quot;Conquering Complexity in Your Business: How Wal-Mart, Toyota, and Other Top Companies Are Breaking Through the Ceiling on Profits and Growth Paperback&quot; by Michael L. George and Stephen A. Wilson
评论 #8822154 未加载
zedpm超过 10 年前
The notion of holding a Code Purge Day (as Quora did) is excellent. Searching out and removing cruft in the code base results in a benefit that&#x27;s hard to measure but easy to understand. Having more compact code without confusing distractions leads to easier comprehension and ought to make for faster bug fixes.
评论 #8821832 未加载
评论 #8823504 未加载
gaius超过 10 年前
<i>Matching passengers and drivers while adjusting prices to balance supply and demand is a complex and hard problem. So is routing questions and answers to the people most likely to answer and read them</i><p>I used to work with a guy who worked on the compute infrastructure that CERN uses to sift the petabytes of data they get from the LHC. That&#x27;s a hard problem.<p>And that&#x27;s the problem with web guys, they think the web is all of computing, yield management has been done by airlines and hotels for DECADES. It is very, very far from breaking novel ground at this point.<p>Now the points he makes about the TCO of a new feature are valid but please, if you&#x27;re going to brag, be prepared for people to yawn.
评论 #8823622 未加载
seivan超过 10 年前
You can&#x27;t do this for games. Sometimes a game needs a particular feature that has a ton of states and complexity.<p>The only thing you can do is 1)Mitigate that by isolate it 2)Separation of concern<p>You could have a component that&#x27;s fuck-all complex, but as long as it&#x27;s a single, isolated component, that can be disabled by<p>messedUpComponent.isEnabled = false, then I&#x27;m ok.
评论 #8822631 未加载
评论 #8822308 未加载
soup10超过 10 年前
As a one man army indie game developer I basically can no longer maintain my code-base without going crazy because it&#x27;s grown to the point where it&#x27;s no longer a one man job. I knew this would be a problem, so keeping code complexity to a minimum has always been a priority, but it&#x27;s no longer possible to keep up. Thankfully it&#x27;s reached maturity as a product and is a fun and profitable game. Many people think i&#x27;m &#x27;brilliant&#x27; when they see the product and they hear i&#x27;m the only the developer and it&#x27;s a custom 3d engine. But truth of the matter is much of my brilliance was stubbornness and cleverness in keeping things simple and code complexity to a minimum. The problem is you run out of memory in your brain. You forget how systems work. You have to trace back through the code and &quot;reload things&quot;. When you have to make a modification.<p>When I hit my human ram capacity so to speak, i was extremely frustrated that I couldn&#x27;t make the boundlessly quick progress that I used to. But then you get used to it, and just accept that it will take time when you switch from one subsystem to the other, to load up the relevant parts of the code into your human ram in order to do be able to do the work you want to do.<p>The simpler and more straightforward the program architecture, the easier it is to jump into and out of and write new code. Of course understanding what your product is and is going to be helps tremendously in making sure you can design your program in a sensible way.... I&#x27;ve been lucky enough to have a firm intuitive understanding of future the design of the game and it&#x27;s features as it was being formed. (not being at the mercy of clients or bad managers is a wonderful thing)<p>What i&#x27;ve noticed is a big difference from me and friends with small development studios that accomplish less with a lot more sweat. Is that I don&#x27;t develop fully featured flexible systems when simple ones will do, I don&#x27;t roll my own code when good&#x2F;simple libraries or apis exist. I&#x27;m trying to make my product a work of art, and the code is functional and simple. Where often I see other good engineers try to make their code the work of art. Which leads to lots unnecessary code complexity because they engineer systems designed to be future proof for everything, instead of of what realistically will be necessary for the future of the project or projects. A system with 30 components is easier to understand and easier to maintain than a system with 100. More functions, more objects, and more abstractions. Often mean more components and code complexity. Which ultimately means it&#x27;s going to take more brainpower to get anything done. Which is why it takes teams of 100s to maintain large enterprise software projects where the incremental updates change very little even though the engineers working on it are educated well trained people. <i>shrug</i>
评论 #8822513 未加载
评论 #8822693 未加载
评论 #8823930 未加载
jaynate超过 10 年前
In the world of enterprise software it&#x27;s also easy to overlook the cost of implementation&#x2F;setup of features on the services teams and customers. Is helpful to define nonfunctional requirements that deal with these ancillary concerns.<p>Also all of these issues highlight why product management needs to have a working knowledge of technology and the related costs of various trade offs.
sunasra超过 10 年前
I am totally agree with &#x27;Use data to prune unused features&#x27; point.<p>It might happened that some features were introduced years ago based on demand. But It would be not usable for now. Still those features are maintained. I believe those features should be removed which eventually gives you space to work on innovative features for same product.
stefs超过 10 年前
currently it looks like they ignored the hidden cost of being on the hn frontpage.
logicallee超过 10 年前
This article repeats a meme, but is total BS. It&#x27;s similar to saying &quot;the hidden costs of being a founder&quot; and then stating that if you do ever make a successful exit, you will have a lot of your time wasted by having to select bedlinen and other hidden costs of having made an exit. (the hidden cost to being a founder - you will be forced to work unpaid hours shopping for luxury bedlinen. so consider carefully.) Well guess what: that&#x27;s not real technical (or founder) debt!<p>The idea of calling this stuff technical debt is simply laughable. there&#x27;s no debt. you don&#x27;t owe shit.<p>hint: if you code something up in 20 minutes you still don&#x27;t have to do all that other stuff, you can just ignore it, and throw away the twenty minutes of code if it&#x27;s not better than not having it. if you become a millionaire you don&#x27;t have to do all that stuff, you can just ignore it.<p>Let me put it another way. Say you&#x27;re an MBA who can&#x27;t code anything but excel formulas, yet you figured out how to get excel and powerpoint onto the web as a web app (wat). you create something and get 5,000 paying users and raise a $500,000 investment.<p>Have you created technical debt? No. You&#x27;re at the same square as if someone gave you $500,000 to spend on developers against your mockups, except that you&#x27;ve validated them as well. There&#x27;s no debt here. This article had it right:<p><a href="http://www.higherorderlogic.com/2010/07/bad-code-isnt-technical-debt-its-an-unhedged-call-option/" rel="nofollow">http:&#x2F;&#x2F;www.higherorderlogic.com&#x2F;2010&#x2F;07&#x2F;bad-code-isnt-techni...</a><p>The people that call this scenario (excel on the web) technical debt, think that somehow the MBA &#x27;borrowed&#x27; the web app from a real dev, and now owes it in real development costs. That&#x27;s a wrong way to think about it. In fact it&#x27;s a ridiculous way to think about it.
评论 #8821924 未加载
评论 #8821915 未加载
评论 #8821904 未加载