[I've previously asked][1] why many consumer apps and devices have slow end-user performance, even when their implementors were working toward a known hardware platform. 

Some notable examples include the [laggy][2] [Comcast DVRs][3], the [Apple iPhone 3G][4]'s suffering under iOS4, [desktop iTunes (painfully slow on MacBooks)][5], and [Eclipse][6] [lags][7] [badly][8] on less-than-beefy machines (or when plugins are enabled). I'm sure you too have encountered some app where you press a key and wait... and wait... and wait... before it responds.

When [I previously asked][9] what's responsible for slow software, [Bob Murphy][10] and [Mike Dunlavey][11] suggested that it's a social and management problem:

> This isn't a technical problem, it's a marketing and management
> problem.... Utimately, the product
> mangers are responsible to write the specs for what the user is
> supposed to get. Lots of things can go wrong: The product manager
> fails to put button response in the spec ... The QA folks do a
> mediocre job of testing against the spec ... if the product management
> and QA staff are all asleep at the wheel, we programmers can't make up
> for that.

 

> People work on good-size apps. As they work, performance problems
> creep in, just like bugs. The difference is - bugs are "bad" - they
> cry out "find me, and fix me". Performance problems just sit there and
> get worse. Programmers often think "Well, my code wouldn't have a
> performance problem. Rather, management needs to buy me a
> newer/bigger/faster machine." The fact is, if developers periodically
> just hunt for performance problems ([which is actually very easy][12]) they
> could simply clean them out.


So, if this is a social problem, what social mechanisms can an organization put into place to avoid shipping slow software to its customers? 

Do you make perf testing a first class QA priority and have them submit bug reports on each lag? But it shouldn't take a letter from QA for a programmer to realize that a 3 second lag between keypress and response is unacceptable — should all programmers do their own QA so they see such issues immediately? (That's what we do at my org.)

Is this an automated testing problem? Some apps have built-in watchdog timers that detect when the UI thread stalls for more than a second, but then what should the timer do?  [Catch a callstack and send it to the bug DB][13]? Set off alarms?

Is it a problem of complacency; do we need to create a sense that writing fast code is a personal responsibility? Counter cliches about about optimization and the root of evil? Hang a banner in the lobby that says "writing a UI stall is like spitting in the customer's face?" Forward emails from customers unhappy about slow performance to the whole team? 

Even apps that make performance a design requirement up front and test on target hardware can run into trouble if they ignore perf considerations at the outset ("we'll optimize that later"), then hit a wall at the end when it's too late to fix bad architecture ("too costly to fix that now").

If what ultimately matters in performance is that the customer never wait more than [0.1 second between input and response][14], what social and procedural mechanisms can an org put in place on to day one to make sure the product ships that way on day 500?


  [1]: http://programmers.stackexchange.com/questions/86006/what-causes-bad-performance-in-consumer-apps
  [2]: http://www.pvrblog.com/2005/11/comcast_hd_dvr_.html
  [3]: http://www.satelliteguys.us/comcast-cable-forum/88057-anyone-else-dvr-lag-issues.html
  [4]: http://www.youtube.com/watch?v=Pdk2cJpSXLg
  [5]: https://discussions.apple.com/thread/2579483?start=0&tstart=0
  [6]: http://www.eclipse.org/forums/index.php/m/728774/
  [7]: http://www.coderanch.com/t/104591/vc/Eclipse-very-slow-any-way
  [8]: http://ubuntuforums.org/showthread.php?t=183239.
  [9]: http://programmers.stackexchange.com/questions/86006/what-causes-bad-performance-in-consumer-apps
  [10]: http://programmers.stackexchange.com/questions/86006/what-causes-bad-performance-in-consumer-apps/86019#86019
  [11]: http://programmers.stackexchange.com/questions/86006/what-causes-bad-performance-in-consumer-apps/86030#86030
  [12]: http://stackoverflow.com/questions/375913/what-can-i-use-to-profile-c-code-in-linux/378024#378024
  [13]: http://visualstudiogallery.msdn.microsoft.com/fa85b17d-3df2-49b1-bee6-71527ffef441
  [14]: http://www.useit.com/papers/responsetime.html