Skip to main content

Happy Home

Posted by editor on April 12, 2006 at 3:04 PM EDT

What it takes to keep programmers productive

Joel Spolsky has another interesting essay up, and this one should give developers the warm fuzzies because it says that if you're at a software company, then the whole point of management is to keep you happy and productive.

Specifically, Joel writes of a The Development Abstraction Layer, which exists to eliminate all the implementation details that sit between you and a svn commit.

With a software company, the first priority of management needs to be creating that abstraction for the programmers.

If a programmer somewhere is worrying about a broken chair, or waiting on hold with Dell to order a new computer, the abstraction has sprung a leak.

Think of your development abstraction layer as a big, beautiful yacht with insanely powerful motors. It's impeccably maintained. Gourmet meals are served like clockwork. The staterooms have twice-daily maid service. The navigation maps are always up to date. The GPS and the radar always work and if they break there's a spare below deck. Standing on the bridge, you have programmers who really only think about speed, direction, and whether to have Tuna or Salmon for lunch. Meanwhile a large team of professionals in starched white uniforms tiptoes around quietly below deck, keeping everything running, filling the gas tanks, scraping off barnacles, ironing the napkins for lunch. The support staff knows what to do but they take their cues from a salty old fart who nods ever so slightly in certain directions to coordinate the whole symphony so that the programmers can abstract away everything about the yacht except speed, direction, and what they want for lunch.

Management, in a software company, is primarily responsible for creating abstractions for programmers. We build the yacht, we service the yacht, we are the yacht, but we don't steer the yacht. Everything we do comes down to providing a non-leaky abstraction for the programmers so that they can create great code and that code can get into the hands of customers who benefit from it.

Set aside vanity for a second, and what Joel is saying still makes sense. The business functions (sales, legal, accounting, administration) are still required, but the point of them is to keep the software engineers writing software. Without them, after all, there's no software company. Oh, there may still be activity -- I've known places where much of the company seemed to play "business", in much the same way that children play "house" -- but if that activity fails to keep the software engineers cranking out software, then there's no point to it. Joel has one more nice kicker about what produces software productivity:

A programmer is most productive with a quiet private office, a great computer, unlimited beverages, an ambient temperature between 68 and 72 degrees (F), no glare on the screen, a chair that's so comfortable you don't feel it, an administrator that brings them their mail and orders manuals and books, a system administrator who makes the Internet as available as oxygen, a tester to find the bugs they just can't see, a graphic designer to make their screens beautiful, a team of marketing people to make the masses want their products, a team of sales people to make sure the masses can get these products, some patient tech support saints who help customers get the product working and help the programmers understand what problems are generating the tech support calls, and about a dozen other support and administrative functions which, in a typical company, add up to about 80% of the payroll. It is not a coincidence that the Roman army had a ratio of four servants for every soldier. This was not decadence. Modern armies probably run 7:1. (Here's something Pradeep Singh taught me today: if only 20% of your staff is programmers, and you can save 50% on salary by outsourcing programmers to India, well, how much of a competitive advantage are you really going to get out of that 10% savings?)

Anyways, there's something to show the boss. Let us know how that goes, OK?


The other item in Also in Java Today should be of use to web services developers. After all, you may know web services, but how much do you know about the underlying HTTP standard? With a little tweaking, it's possible to speed up your web service not through snazzy programming on the server side, but by letting HTTP help you out with persistent connections, caching, compression, authentication, and more. Joe Gregorio's XML.com "Restful Web" entry, httplib2: HTTP Persistence and Authentication, is nominally about a Python library, but this installment is almost entirely about HTTP headers that are easily manipulated from Java.


In Projects and Communities, NetBeans' Subversion support is catching up with CVS, and Roman Strobl's weblog features a Flash Demo of New Subversion Support in NetBeans. "While the old Subversion support is still available on the update center, the new one will be available soon. You can watch this demo to see how it works at this moment..."

In an article from the Java BluePrints Solutions Catalog, Greg Murray shows how to do Realtime Form Validation Using AJAX. The article shows how you can perform server-side validation without reloading the page, allowing you validate such things as the availability of new user names or to use server-side business logic while the user is still typing


deronj is excited by a Looking Glass development in today's Forums. In 3D in 3D!, he writes: "With the recent release of Nvidia's 8756 driver, OpenGL programs now run *INSIDE* Looking Glass. Check out the this image. This is running lg3d-app on Solaris x86 on an Ultra 20 with a Quadro FX 3000. The two glxgears windows are not still images--they are actually actively moving, running 3D OpenGL programs. Notice that OpenGL windows can be transparent in LG and they also can be slanted. While slanted, the gears on the right keep turning. Best of all, I didn't have to do a thing. Nvidia did it all for me!"

rickjones is trying to figure out an AccessControlException problem in applet: "I'm migrating some web service client code from 1.x to 2.0, and this code has to run in an applet. The problem is that it throws an ExceptionInInitializerError, caused by an AccessControlException somewhere down in resolver. This happens on the first attempt to create the connection object. The code runs fine stand-alone, so this seems to be an applet issue. The equivalent functionality written for JWSDP 1.5/1.6 never had this problem. The applet is signed, and the remote connection is under the same URL as the applet."


Marina Sum announces further open-source releases in today's Weblogs. In Open Source Soon: Key Components of Sun Java Studio Enterprise IDE, she writes: "Today, Sun announced that it will open-source the key components of its Sun Java Studio Enterprise IDE as NetBeans Enterprise Pack on netbeans.org."

Masoud Kalali is Testing some FrameWorks and applications on Glassfish build 40+ part V , And some tips about Application deployment: "In this part I will show you how DWR works fine on GlassFish. Also you will see different methods of web application deployment in GlassFish."

In Rewriting SendRedirect to deal with SSL (or https) offloading, Satya Komatineni writes: "When 'sendRedirect' is used, sometimes the relative URL is translated into an absolute URL using the wrong scheme (http vs https). This articles explores the problem and a possible solution using servlet filters."


In today's java.net News Headlines :

Registered users can submit news items for the java.net News Page using our news submission form. All submissions go through an editorial review before being posted to the site. You can also subscribe to the java.net News RSS feed.


Current and upcoming Java Events :

Registered users can submit event listings for the java.net Events Page using our events submission form. All submissions go through an editorial review before being posted to the site.


Archives and Subscriptions: This blog is delivered weekdays as the Java Today RSS feed. Also, once this page is no longer featured as the front page of java.net it will be archived along with other past issues in the java.net Archive.



What it takes to keep programmers productive