Given the rapid advance of Moore's Law, when does it make sense to throw hardware at a programming problem? As a general rule, I'd say almost always.
Consider the average programmer salary here in the US:
You probably have several of these programmer guys or gals on staff. I can't speak to how much your servers may cost, or how many of them you may need. Or, maybe you don't need any -- perhaps all your code executes on your users' hardware, which is an entirely different scenario. Obviously, situations vary. But even the most rudimentary math will tell you that it'd take a massive hardware outlay to equal the yearly costs of even a modest five person programming team.
For example, I just bought two very powerful servers for Stack Overflow. Even after accounting for a third backup server and spare hard drives for the RAID arrays, my total outlay is around $5,000. These servers, compared to the ones we're on now, offer:
I'd say that's a great deal. A no-brainer, even.
Incidentally, this is also why failing to outfit your (relatively) highly paid programmers with decent equipment as per the Programmer's Bill of Rights is such a colossal mistake. If a one-time investment of $4,000 on each programmer makes them merely 5% more productive, you'll break even after the first year. Every year after that you've made a profit. Also, having programmers who believe that their employers actually give a damn about them is probably a good business strategy for companies that actually want to be around five or ten years from now.
Clearly, hardware is cheap, and programmers are expensive. Whenever you're provided an opportunity to leverage that imbalance, it would be incredibly foolish not to.
Despite the enduring wonder of the yearly parade of newer, better hardware, we'd also do well to remember my all time favorite graph from Programming Pearls:
Everything is fast for small n. When n gets large, that's when things start to go sideways. The above graph of an ancient Trash-80 clobbering a semi-modern DEC Alpha is a sobering reminder that the fastest hardware in the world can't save you from bad code. More specifically, poorly chosen data structures or algorithms.
It won't hurt to run badly written code on the fastest possible boxes you can throw at it, of course. But if you want tangible performance improvements, you'll often have to buckle down and optimize the code, too. Patrick Smacchia's lessons learned from a real-world focus on performance is a great case study in optimization.
Patrick was able to improve nDepend analysis performance fourfold, and cut memory consumption in half. As predicted, most of this improvement was algorithmic in nature, but at least half of the overall improvement came from a variety of different optimization techniques. Patrick likens this to his early days writing demo scene code on the Commodore Amiga:
In the early 90s, I participated in the Amiga demo scene. It's a great illustration of the idea that there is always room for better performance. Every demo ran on the same hardware. It was the perfect incentive for demo developers to produce more and more optimized code. For several years, every month some record was beaten: the number of 3D polygons, the number of sprites, or the number of dots displayed simultaneously at the rate of 50 frames per second. Over a period of a few years, the performance factor obtained was around 50x! Imagine what it means to perform a computation in one second that originally took an entire minute. This massive gain was the result of both better algorithms (with many pre-computations and delegations to sub-chips) and micro-optimizations at assembly language level (better use of the chip registers, better use of the set of instructions).
Patrick achieved outstanding results, but let's be clear: optimizing your code is hard. And sometimes, dangerous. It is not something you undertake lightly, and you'd certainly want your most skilled programmers working on it. To put it in perspective, let's dredge up a few classic quotes.
Rules of Optimization:
Rule 1: Don't do it.
Rule 2 (for experts only): Don't do it yet.
-- M.A. Jackson"More computing sins are committed in the name of efficiency (without necessarily achieving it) than for any other single reason - including blind stupidity."
-- W.A. Wulf
Programmers have a tendency to get lost in the details of optimizing for the sake of optimization, as I've noted before in Why Aren't My Optimizations Optimizing? and Micro-Optimization and Meatballs. If you're not extremely careful, you could end up spending a lot of very expensive development time with very little to show for it. Or, worse, you'll find yourself facing a slew of new, even more subtle bugs in your codebase.
That's why I recommend the following approach:
Always try to spend your way out of a performance problem first by throwing faster hardware at it. It'll often be a quicker and cheaper way to resolve immediate performance issues than attempting to code your way out of it. Longer term, of course, you'll do both. You'll eventually be forced to revisit those deeper algorithmic concerns and design issues with your code that prevent the application from running faster. And the advantage of doing this on new hardware is that you'll look like an even bigger hero when you deliver the double whammy of optimized code running on speedier hardware.
But until the day that Moore's Law completely gives out on us, one thing's for sure: hardware is cheap -- and programmers are expensive.
This article scares me in it's simplicity.
1) Doubling HW rarely doubles performance or throughput. However, doubling production server hw usually requires similar purchases in development, test, stress, uat environments too. In addition excessive disk requirements can quickly lead to huge backup storage requirements. Figure a copy for everynight of the last month (30) plus a monthly for the last 7 years comes to a multiplier of 110 copies of that data for compliance purposes plus whatever copies are in the non-production environments.
2) HW is a small fraction of overall server costs.
I saw a vendor's suggested €250K hw purchase add up to €6m when software licencing was added (ftp software, clustering sw, db software, middleware, app server s/w, backups, etc). Their 'HW is cheap' attitude was working out so expensive that we were willing to send them packing.
3) I do databases. I get fed up when database developers say that the database infrastructure is performing poorly when new code is releases into the stress environment. When we investigate, we discover basic errors such as table scans.
In a recent scenario, we were asked to find out why the hw was performing slowly. We discovered a missing index that boosted performance on a key user action by 8000. I would hate to know how much hw would be required to provide the equivalent HW performance.
In summary, good HW can double / treble performance. But spending some developer time can improve performance by thousands. But it does cost time. The main question is, is it fast ENOUGH for the purpose?
Niall Flanagan on December 20, 2008 11:36 AMBecause fast hardware becomes more and more cheaper 'we' start to do slow things like using XML or programming in Ruby because it shortens the time to market.
Most developers never read database documentation.
Fast hardware makes Vista Aero possible.
Theo on December 20, 2008 12:17 PMClearly, hardware is cheap, and programmers are expensive. Whenever you're provided an opportunity to leverage that imbalance, it would be incredibly foolish not to.
That might be true for application software that just runs on a few servers.
It is generally not true for device drivers and other system software that runs on millions of desk top PCs (Vista anyone).
It is rarely true for for memory/weight/power constrained items like mobile phones, organisers etc.
And it is total nonsense to apply it to embedded software that runs on the billions of TV remote controls, network switches, keyboards, mice, mp3 players, dvd players, televisions, washing machines etc. If you're selling a hundred million units then an extra penny saved on a component can hire you a lot of programmers, as can selling an extra 10% because your device is perceived to be faster/slicker/better than the alternatives.
I was brought into a place one time to check out why a government-mandated report on mortgage fee codes was failing. The report (written in C# against SQL Server by one of my junior colleagues) was now taking so long that it didn't finish.
I walked in, looked at the table and put a table index on fee code. Instantly the report went from taking over 2 minutes to 45 seconds. Then I spent a few minutes looking at the query. I made a simple change to it (eliminated an obvious cross join) and got it down below 30 seconds.
Then I looked at the C# code. My predecessor was concatenating strings together when formatting the report. I changed it to StringBuilder Appends instead. The report now ran in 8 seconds. That was all in under an hour's worth of time and it really wasn't hard at all.
So, I agree that it's well worth it to spend an hour or two getting an expert to look at the low-hanging fruit first. Sure, faster hardware would have got it done, but why?
PRMan on December 20, 2008 12:51 PMOn the Go programming list, they recently discussed an area where throwing more hardware on a problem may not be appropriate: If you have made a change to your Go playing program, you may need to run it thousands of times against other programs and earlier versions of itself, in order to convince yourself that the change is any good. Then the code needs to be fast - the gains in productivity you gain from using a higher level language are lost again in the additional time needed to regression test it.
There might be cases where this also applies to other software: Things that need to be profiled so heavily and continuously, that it's better to use additional skill to get it right the first time than just buying more hardware (after a certain point). Maybe weather prediction systems, climate models, or other simulation/prediction systems?
Harald Korneliussen on December 21, 2008 1:49 AMThis is an interesting article and one cannot in isolation argue either clause of your premise, especially the I think however, that much is missing from your list of factors with respect to the issue.
The initial cost of hardware (servers) is not the only cost, and - yes hardware is cheap, but is a drop in the proverbial bucket compared to the total cost of ownership. I believe overtime your premise is eroded by cost of:
1. Licensing software such as Oracle or Websphere on additional servers
2. Space/leasing costs
3. Power and A/C costs
4. Server admin/maintenance costs, and
5. Most importantly - if one wants to add servers to improve performance, then one will probably need to upgrade (continuously) networks and network appliances to realize the gains, and
6. Finally - not all performance issues are caused by software. Server configurations (improper configurations as it were) and under-powered network appliances can certainly contribute to performance issues.
I think your statements,
Always try to spend your way out of a performance problem first by throwing faster hardware at it. It'll often be a quicker and cheaper way to resolve immediate performance issues than attempting to code your way out of it. Longer term, of course, you'll do both.
... amount to bad advice. Example: I go out and buy “n” servers to “cure” a performance issue per your statements above while at the same time incurring all costs listed above. A day later and while the new servers are being built out (incurring additional costs) and prior to going live – a server admin solves the problem in 15 minutes by increasing Java heap size.
Did you catch the same “virus” as this guy? :-)
http://articles.techrepublic.com.com/5100-10878_11-6044115.html?tag=search
Forgive the grammatical error of the opening sentence above. Thank you.
JakeBrake on December 21, 2008 3:27 AMJeff,
For once I disagree with you.
I think throwing hardware at the problem is like playing Monopoly and having the get out of jail free card. Certainly with windows servers you can only expect to play this card once every 24 months to get a significant leap forward in terms of 'raw' pace.
As for dev workstations, any software company that does not invest in tools/workstations/monitors/chairs/environment etc. for their developers (or indeed any serious PC power user) is simply being short sighted.
Mike
Mike on December 21, 2008 3:53 AMHeh, try getting the public service to fork out for hardware for developers. We're developing on 5-year old servers that are show as hell. I've been trying to get us new development servers for 2 years now -- with no success in sight.
In terms of effort, it's easier to hire more bums on seats than have new servers purchased at 1/10th of the cost.
Peter on December 21, 2008 5:14 AMProgrammers are not about writing the best/fastest algorithms. The more important part is building the system/software itself. Build it reliably, to be modular and expandable. Going from general to specific. Creating and tying the pieces together. No hardware can do that.
anonymous on December 21, 2008 6:59 AMYou've gained some interest on Slashdot:
http://developers.slashdot.org/developers/08/12/20/1441203.shtml
Sentax on December 21, 2008 7:53 AMweak argument. Throwing more hardware at problems does not make them go away. It may delay them, but as an application scales either:
1) you may get a combinatoric issue pop up outstripping you ability to add hardware
and
2) you just shift the problem to systems administration who have to pay to maintain the hardware. Someone pays either way.
All-in-all, this is the sloppy sort of thinking that leads to such screwed up software. We don't need good software so we don't need good programmers and the cycle perpetuates.
The worst performance I have seen has come from middleware, despite all the DB bashing that goes on. Things like constant roundtripping to the DB, bubble sorts (!), constant re-rendering of the UI/web page etc.
Oh, and most of the time, the server is *not* the bottleneck. The network is. You can never go faster than your network. So keeping queries minimal and knowing when and how to cache are important. But that takes skill, which doesn't doesn't exist very much amongst programmers.
PJL on December 21, 2008 8:16 AMWow! I'm grossly underpaid, but then I don't do much on my job and live in an inexpensive area. I really should upgrade my home computer but it would take a long time to reinstall everything on a new box. Figure at least an entire day wasted installing Visual Studio alone.
Robert S. Robbins on December 21, 2008 8:21 AMHello,
In India, Programmers are cheap, hardware is pretty costly...
Sarath on December 21, 2008 9:52 AMThis is a pretty gross generalization.
True, spending 3 weeks to get 5% more out of an algorithm makes little financial sense.
But, for poorly designed database tables, indexes, and databases, this is very poor advice.
Steve on December 21, 2008 11:58 AMProblem here is that you can spend your self into a problem too.
Classic example here is 4 and 8 core processors. Wrong design and 4 core version is just as fast as the 8 and the 12 core is slower. So yes 12 core is cheaper than 8 because it basically don't work.
Be sure to throw good hardware at problem. If good hardware happens to be cheep of course then throw it at it.
Number two adding more cores on some OS's makes problems worse not better. So make sure you use a good quality OS built to scale and have developers working on fixing its scaling issues.
Be sure problem scales. Not point throwing 1000 cores at a problem if problem can only be processed single threaded.
Be sure to use a complier that optimizes correctly. Surprising how much difference spending some money buying Portland group complier and using that instead of MSVC or gcc.
I have had cases were people wasted hours trying to improve performance threw altering code. Only to find out that I was hammering them all I did was build the code they were starting with with a good complier that had done all the optimization methods they were trying automatically.
Some compliers even rewrite Algorithms removing human error. Human doing optimizations can be a complete waste of time. Some cases it would be better for long term to send your developers into the complier itself.
Depends on the programmers you have working at your shop, but my impression is the world has replaced programmers who know about qsort being a standard feature, with those who implement their own, buggy bubble sort.
I work in a shop with 70-80 developers, so any initiative costs a prohibitive amount of money in absolute dollars. At the new year kickoff event, the most popular request from the Devs [aside from more vacation time :-) ] was dual monitors.
Management had a cow when they found it would cost about $500 per seat for a second monitor and graphics card, or $40-50k to outfit the whole group. A pilot project with a selected group of developers was initiated to evaluate the productivity gains. As one could guess, a year after the initial outcry we are still waiting for dualies.
Ed G on December 22, 2008 1:27 AMmilkmaid bill
asdf on December 22, 2008 2:14 AMThis is one of those wonderful articles that ends up at Facebook and other Web2.0 applications. They utilize an unbelievable amount of hardware to make up for some phenomenally poor design decisions that they're now stuck with. Throwing hardware at the problem first is rarely the right answer.
Benn on December 22, 2008 2:47 AMNice article.
I think it applies only when:
1. you have a web based project.
2. your code is THE shit and scales well(responds to addition of new hardware).
3. you have an optimized, tested and released product and it makes economic sense to add more servers than to pay for new developer.
4. you own stackoverflow.com
I think hiring good programmers is very important.. I have a discussion going on about this over at the forums section of a href=http://www.corkin.comCorkin/a
corkin on December 22, 2008 3:32 AMI think hiring good programmers is very important.. I have a discussion going on about this over at the forums section of http://www.corkin.com
corkin on December 22, 2008 3:32 AMJeff: I think you may have nuked the fridge with this one.
TraumaPony on December 22, 2008 3:41 AMThat whole article rests on the assumption that the software is only ever used once on a single product. A bussines solution that software is especially bad at.
Deploying multi server solutions is not exactly cheap. Doing it multiple times on multiple solutions is very expensive.
Furthermore it is always done in the end of a project where the deadline has long passed by, so it is stressfull too.
Max M on December 22, 2008 4:23 AMI'd say with both developers and hardware it comes down to the law of diminishing returns. For example if a website cannot cope with 10 users then throwing more hardware at it won't fix it. And on the other hand adding more developers to optimise code there comes a point where you get less benefit.
Paul on December 22, 2008 4:42 AMJeff -
One of these days (soon I hope), we'll convince customers that gathering a dozen or more people in one place for a design review is not a smart use of development funds. If ten of those people need to fly (business class for those wearing suits) to Chicago or Birmingham or ?, need rental cars, need hotel rooms, need to eat, etc., for a review, perhaps the money might be better spent. A terabyte hard drive costs less than most domestic airfares. A fully loaded server costs less than an international airfare. Doing the formal parts of design review via virtual meetings (assuming you can spend the savings on hardware), might mean higher thruputs via extra servers, or redundant mirror systems where appropriate.
On the optimization front, I've found unrolling loops by hand very effective if the N in do 1,N is a constant. Knuth Volume 3's index has 13 optimization, loop references, mostly in the exercises.
Just a guess, but I suspect there's plenty of scope for optimizing
anything written in Java.
Perhaps irrelevant, but whether I use an ATM in NYC, or Glasgow, or Auckland, I see much the same response (cash out), and crashes are almost unheard of. Large databases are being queried, correct answers are almost always returned, and in a short time. I don't think I want my bank to move to Java.
Lepto Spirosis on December 22, 2008 4:42 AMThis would only work if you run the hardware that this runs on. If you send out the software to customer sites that is slower than the last version or the competition it just looks like a poor quality product in my eyes. If the software is made for the desktop it will often cost more in hardware upgrades than was spent on the software in the first place (e.g. Vista/Office 2007).
I think you have to pay attention to performance metrics but not necessarily do anything about them if they are not too bad. If you are trying to wring the last 10% or 20% out of something you should give up since it's not worth it. However I often find optimising bits of unloved code gets speed ups of over 10x (which is still only worth it if that code is often used or causing a problem).
Throwing more hardware at the problem most of the time is only a temporary solution used by people who don't understand the route cause of the problem (yet), and rarely works as a long term solution in my view.
Richard Cunningham on December 22, 2008 4:48 AMWell, at some point I agree with you. But remember that future optimization of hardware seems to be done by throwing in more cores, and (for most problems) you have to do some good old fashion programming to keep the level of serialized code to a minimum in order to scale beyond a certain number of cores.
Although, for a lot of web applications the add more hardware approach will get you far (but only so far...).
Kim Be on December 22, 2008 5:05 AMMy friend (and IT exec extraordinaire) Dave Berk has a response to this article posted at his blog. http://www.lump.org/?p=135 He hits on many of the same ideas mentioned by others.
--Most software is usually not very fast to start with. Good optimization can often get you much better than the linear gains you get _at best_ by adding hardware.
--Lots of common software gets exponentially slower as you increase it's usage / throughput.
Jeff Lind on December 22, 2008 5:10 AM@Dave
So my advice would be for beginners to spend a bit more time learning where their programs are bad so that they can become better.
You see, problem is that they are unaware of where their programs are bad in the first place.
On this one, code on a well structured way, profile, tune area involved until before the point of dismishing return and rethink next step.
Most of the times is just sloppy code and unawareness of behind the courtains work.
I'd like to know where these first year programmers are making $85,000 a year. Where I am, the average salary for starting out is $40k-$50k tops.
Kevin on December 22, 2008 6:14 AMAlan Kay:
Neither Intel nor Motorola nor any other chip company understands the first thing about why that architecture was a good idea.
Just as an aside, to give you an interesting benchmark—on roughly the same system, roughly optimized the same way, a benchmark from 1979 at Xerox PARC runs only 50 times faster today. Moore’s law has given us somewhere between 40,000 and 60,000 times improvement in that time. So there’s approximately a factor of 1,000 in efficiency that has been lost by bad CPU architectures.
The myth that it doesn’t matter what your processor architecture is—that Moore’s law will take care of you—is totally false.
Anonymous on December 22, 2008 6:32 AMI agree with Kevin...where the heck do those averages come from?
They seem exaggerated from everything I've been reading up to finding my job.
Locus on December 22, 2008 6:38 AM@Daved
So my advice would be for beginners to spend a bit more time learning where their programs are bad so that they can become better.
You see, problem is that they are unaware of where their programs are bad in the first place.
On this one, code on a well structured way, profile, tune area involved until before the point of dismishing return and rethink next step.
Most of the times is just sloppy code and unawareness of behind the courtains work.
It makes a lot of sense when Jeff runs his application on a single installation, but is the stupidest advice you could give in types of applications.
Take embedded software for example; even a $10 memory upgrade is expensive when you expect to sell 100,000 units.
Tommy on December 22, 2008 8:39 AMJakeBrake is thinking along similar lines as me. Throwing hardware at a software problem has its place in smaller, locally hosted data facilities. When you're running in a hardened facility the leasing of space, power, etc. begins to hurt. One could argue the amount of time and labor necessary to design and implement a new server, along w/ the hardware costs, space, power -- and don't forget disk if you're running on a SAN (fibre channel disk isn't cheap!) -- can easily negate the time of a programmer to fix bad code. But again, that also assumes you know the problem can be fixed with code.
Jonathan Brown on December 22, 2008 9:47 AMThis doesn't hold true for portable application, where size and power consumption matter.
Tim McCune on December 22, 2008 10:24 AMand sometime ago ballmer was hopping around like a monkey making fun of all schizophrenics clapping and shouting in coordinated fashion, developers, developers, developers, developers!!
we need new ai that can write programs for us.
lip balmer on December 22, 2008 11:03 AMIn some scenarios your analysis holds true, in others it doesn't. Sometimes you can't just throw hardware at the problem - especially if the problem is IO bound rather than CPU.
Also the performance difference between well designed code and poorly designed can be extreme and more then can be made up for by simpy throwing hardware at it. Someone's already mentioned the web DB scenario and there are others.
I would say get your good guys to design the most critical/sensitive bits of the system fairly well in the first place. This also avoids optimisation as there is less to gain.
Hugo on December 22, 2008 11:55 AMi really think intel went overboard, since when was 500 MHz or more required for DVD playback? I think the 3 GHz dual cores are overkill. everything's going to a browser eventually, the home operating systems like windows will be obsoleted by clouds of virtual servers. to operate a browser, does one really need more than 500 Mhz?
well on December 22, 2008 11:55 AMSome kinds inefficiency are inexcusable, a product of stupidity or ignorance rather than rapid development. Fast code doesn't need to be complex/bloated/unintuitive/difficult. Someone who's made a habit of writing good code can often produce better, faster code in less time than someone who happily writes piles of slow, repetitive, disorganized crap.
http://wiki.secondlife.com/wiki/LlListSort (reinvented the bubble sort wheel)
David on December 22, 2008 11:57 AMan A+ programmer in Vietnam get about 5.000$ per years only,
why don't you try to outsource to Viet nam ;)
Finally someone has put this to perspective with actual numbers. Nice job! There is no excuse for giving developers inadequate tools that slow them down.
It's like giving a carpenter a wooden hammer instead of a metal hammer. Takes 2x as long to pound in the nail.
Dave Schinkel on December 23, 2008 6:19 AMAlso, you look at any Engineer (CAD, Mechanical, Electrical) and they never have slow PCs. Partly because of the CAD software and that proves that they also don't have time to wait either so why should we? For the longest time, my wife had a better PC than I as she is a Mechanical engineer. It really pissed me off that I was programming and had to wait for MS word to pop up, or VS to compile took 1 minute because I had an fing 5400 rpm hard drive at 2 of my jobs.
Dave Schinkel on December 23, 2008 6:21 AMI ninja-stealth upgraded my own computers at a previous job where we had restrictions like that. I basically gutted the inside of the PC so on the outside it looked like a normal...
When you work for any company who is giving you only 2 gigs ram, or a 5400 rpm hard drive, or inadequate processor and they refuse to give you a developer based laptop or desktop I say I'm all for the ninja-stealth. If they are not smart enough to provide the tools needed then you have to do what you have to do.
You don't come to work to wait for shit to load. You come to work to code and do that as efficient as possible.
Dave Schinkel on December 23, 2008 6:27 AMOne good post, then 3-4 bleeding obvious posts on this blog. Over and over again. That's how you build web properties kicks himself.
Optimization is for losers. Just ask Microsoft how they fared with throwing more hardware at Vista and its inefficiencies. I hear that Vista has eroded Microsoft's standing, brand and profits (somewhat) and allowed a company called Apple to gain a strong foothold in the market with their little super-efficient OS X (running on super-efficient hardware).
Jeff, with all due respect, you should take the time to read up on subjects you write on before posting such simplistic articles.
BugFree on December 24, 2008 10:09 AMJeff, the free lunch *IS OVER* (also for economics).
Javier on December 26, 2008 4:23 AMI have spent years optimizing code with profilers for scientific purposes, where hardware upgrade was not an option, and now in a business environment I don't even think of changing a line of code to do a possible optimization that most probably will simply require a new set of test to verify/certify the product.
The real optimization is improving the design of the code via refactoring such that it is easier to make changes to it.
The you save on the time spent by the developers that makes next changes. So one has to be extremely careful when deciding if it is worth. If the software will have a long history in the future and you expect a fairly large amount of changes due to new requirements, well then you might consider refactoring design.
There is an old saying: You get what you pay for. I think this saying can also be applied to the software developer.
http://www.sa-technology.com
How many times do I have to repeat it here? You compare apples with oranges. H/W has nothing to do with S/W!
With regard to the whole number of people involved in the industry only handful are really writing S/W for H/W. The majority of programmers are writing code for other domains. OK a programmer has a computer science background but that's all. What matters the most is the experience and the knowledge he/she has about a different profession. You get business programmers, accounting programmers, industrial programmers, telecommunication programmers and so on. Has someone working in the business tried to get hired in a telecoms startup? Even the most talented and gifted programmer will have hard time to do so.
It is for that programmers are much, much more expensive than H/W.
What are you looking for when you buy new H/W? Processor, memory and HD. That's all. Now let's get a look on Monster or Hotjobs or other. The less bushy add will have at least 500 words describing the whole daydream of hiring mgr. Hardly someone will fit 70-80%. 100% is impossible - this would be the God of programmers, and God doesn't need a job!
You see...
p.s. suggestion for a discussion topic: How log would take someone in love with Java to switch language?
Your cost for hardware outlay is not accurate fro a large company with managed servers, storage, and software - power - and storage management. Even in a virtualized environment the average cost without administration of the average new server is more than 10,000. A physical rack mounted server from IBM or HP is more like 25,000 with internal managed storage and memory, OS, backup and managed AV software. Add $18 per gigabyte for SAN storage and the cost of power. and hardware rapidly adds up to be on a par with the cost of labor. Especially since a developer is likely to write more than one system / year and if each system requires new/additional hardware that will require addistional administrative overhead. Take a medium size company of 200 IT employees. 400-600 servers (dev test/qa and production) is not an unreasonable size for their data center. Accounting for 1/8 of the IT staff being developers each adding 3-4 servers per year that's a growth of 120-160 servers per year.
Servers 160 * $15,000 = 2.4M
Developers 25 * $85,000 = 2.1M
HMMMMMM
My employer has many large, heavily-utilized databases. Some of our applications run for 8 to 20 hours, and scan billions of rows of data per hour. We throw prodigious amounts of hardware at this problem - expensive Netapp filers with lots of cache driving hundreds of spindles with terabytes of data. More money helps improve performance, but the biggest gains came through the application of common-sense analysis to the applications. We've seen 20% to 99% reductions of runtime as a result. (yes, at least one application dropped from hours to minutes. ) Per Wirth's law, applications tend to expand to fill available resources. When we push back, applications developers find much ways to make better use of available hardware, and our clients are happier.
I have seen it time and again as mentioned. You throw ten severs at a bad query, it's still a bad query. You re-write the query, and suddenly you only need one server. Programmers are invaluable, no matter what kind of pie chart you can manipulate into looking the other way around.
jsmiddy on January 4, 2009 7:04 AMI think this is attributable to Wes Dyer, we've got it up on the wall in our office:
Make it correct,
make it clear,
make it concise,
make it fast
in that order
Ben on January 4, 2009 10:44 AMWatcom C/C++ Forever!
Lamar Alexander bebobo Dob Bole on January 5, 2009 9:44 AMI'm a brazilian programmer, and the thinks here are very hard, just work, work, work, like a slave, lol, and the sallary its a shit... only a java programmer can make some money, but for other... lol, impossible....
Robert on January 7, 2009 1:24 AMThere are limits to what throwing hardware will do for a performance problem. When those limits are hit, things get really fugly, really quick.
That is why one school of thought will say that performance/stress/load testing should be done at every stage of development.
Stephen on January 12, 2009 1:57 AMJames you are giving one of the most horrible examples, but nonetheless real out there. The problem is corporations over spending on servers by buying about 100 times more horsepower than they need. Look at Plentyoffish.com and how it runs on just a few servers for an example.
Chris Love on February 5, 2009 10:12 AMrwerwer
dasd on February 11, 2009 6:33 AMuh, what about the people who support the hardware? Storage engineers? Network admins?
Not to mention the fact that hardware alone doesn't solve anything.
In fact, poor and sloppy programs, not to mention developers who don't know how to manage their own tools and code, probably account for a great deal of the need for more power...
Charley on February 19, 2009 7:12 AMOne must also understand that when a company pays $85,000 a year for a programmer, they are paying for the most complicated machine we, as a race, know: the human brain. There is such capacity in a human to learn, that until a computer can surpass this capability, humans will possess a more adaptive, analytical machine. Humans are set to control computers. Although computers have incredible calculating power, they do not have the brain capacity to take full advantage of it. This is where a human programmer steps in. He/she has the capacity to break down any situation into small, easy problems and then instruct the computer on which order to solve them in. That is the task you are paying for, the people who can analyze real world problems and coordinate the execution of the solution.
CS UGrad on February 19, 2009 10:13 AMvery true.
unless you work on IBM mainframe hardware.
here the cost of hardware is so incredibly inflated that with the money you spent for the new hardware set up you would probably manage to raise the machine memory from 512 to 1024mb and maybe get 300mb more space on the disk... (plus here in italy the average salary for a 10 years-experienced developer is around half what you quote, even taking the ongoing money exchange rate in account).
M
Marcello on April 29, 2009 5:05 AMThe cost of hardware is nothing compared to the cost of reconfiguring everything. We buy new hardware every year practically. Then it takes a full day to get it set up. If employees are waiting they get frustrated which leads to low moral which is not something you want in your company. Buy them what they want, it just makes sense. But make the employee feel as if you are doing it for them, not to make them more efficient. Include them in the process.
Internet Marketing IQ on July 5, 2009 9:33 AMprogrammers will be more expensive in the near future.
supra skytop on July 29, 2009 2:33 AMprogrammers will be more expensive in the near future.
supra skytop on July 29, 2009 2:34 AMOr, maybe you don't need any — perhaps all your code executes on your users' hardware, which is an entirely different scenario. Obviously, situations vary. But even the most rudimentary math will tell you that it'd take a massive hardware outlay to equal the yearly costs of even a modest five person programming team."
It seems like I just live in a backwards city where the technology companies can't do simple math like this. I've had sub-par hardware at every company I've worked for, and penny pinching managers reluctant to provide simple upgrades.
At both of my last two positions I had to fight tooth and nail to get a dual monitor set up, and at one they used smaller monitors, apparently out of spite. I had to buy my own ergonomic keyboard and optical mouse too.
Who knew they even still made ball mice?
I wish I was kidding.
Anon on February 6, 2010 11:12 PMInteresting distribution on the pie chart. For us it's been almost backwards, I think; recent algorithmic improvements gave us about a 20% improvement in throughput, and parallelization gave us a 300% improvement (no kidding).
This is for a specific process and I'm not sure how well it holds up with respect to general web design. For me, designing for scale has come to mean having an architecture that will actually give you at least twice as much throughput if you provision twice as much hardware. Most of that lies in parallelism. If you don't have a well-distributed load, adding more hardware isn't going to help you.
Aaron G on February 6, 2010 11:12 PMThere are still plenty of things to optimize that you can't throw hardware at. I see some people have referenced database bottlenecks and whatnot. I have spent much time optimizing the performance and load times associated with JavaScript code and other related page load times in the web world. Unfortunately, you can't throw hardware at a user's bandwidth or their system.
But, you have an interesting point, as long as your code is robust enough not to fail. You can throw hardware at a problem all day and find out that your just running massive endless loops, leaking memory and generally destroying your system. In the end, you could end up with a situation that requires more new hardware as time goes on, at an exponential rate. Although it may be helpful to double your CPU and see your memory fill up that much faster :)
Sleep Deprivation Ninja on February 6, 2010 11:12 PMThat's why we have Wirth's Law: Software is getting slower more rapidly than hardware becomes fast
Ooo, that is so smart. So in few years computers will not be able to run software anymore? Who knew.
Anton on February 6, 2010 11:12 PMFor the most part I agree with what Jeff has stated but at the enterprise level the hardware comes with a maintenance cost.
But most importantly I can't count the calls from head-hunters that have a client looking for someone to analyze their app server and set the fast = true setting. Instead of writing it right the first time and putting it on a server sized to handle the load they all are looking for that setting and just can't locate it. I used to take these contracts but they are usually a no win situation working for some manager who already bought the stuff and has no budget left.
No a good place to be...
Jason Adams on February 6, 2010 11:12 PMI agree! That is why, computer programmers nowadays, are making much money out of it.
CCNA on January 23, 2011 9:03 PMProgrammers are cheap because their labors are not for nothing only. They are professionals so they are worth paying.
CCNA on February 23, 2011 1:31 AMThe comments to this entry are closed.
|
|
Traffic Stats |