Well put Howard!

I've bookmarked this post in the case I meet a PHB...

Olle


2009/6/17 Howard <hls...@gmail.com>

> I recently had an e-mail exchange with a Tapestry user; after
> congratulating me on creating Tapestry, he went on with the following
> observation on his organization: The company I work at unfortunately
> chose JSF for their big app. The reason was that Tapestry was "brittle"
> in the sense that, if one developer breaks something, on a page or a
> service, very often the whole site won't come up because the initial
> registry startup will fail. Or for example, if page A has a pagelink to
> page B, and page B is broken, then page A won't render. While I agree
> that we shouldn't ship unless the whole app is working, this is a
> thousands of pages big app with hundreds of mediocre (as in likely to
> break things) developers. They'd rather have 80% of the thing working
> than nothing at all. I never thought of this for my own projects, and
> haven't had the time to examine the truth of their claims. What's your
> take?
> I provided the following response:
> Early failures are absolutely, 100%, the only path towards code
> quality. You may have heard the phrase "no broken windows" (see "The
> Tipping Point" by Malcom Gladwell for more details) but the short form
> is that when errors go uncorrected (whether they are broken windows in
> an abandoned building, or broken code in an application) they tend to
> multiply quite rapidly.
> The things that will "break" a link from page A to page B are
> substantial problems such as invalid templates, references to unknown
> properties or components, or compile errors in the page B class ...
> things that no other developer should ever see when page B's developer
> is working and checking in code. That is, problems that should never be
> checked into trunk, but instead kept in a local workspace or a private
> branch.
> An organization that thinks that fail early is a problem is an
> organization that isn't prepared to develop a large application in any
> technology. The image I'm getting is one where there is no build
> server, no continuous integration, at best CVS for source code
> management (or possibly one of those "shared directory"
> monstrosities) .... i.e., a chaotic environment where errors are
> allowed to be checked in to the trunk and can go unnoticed for some
> time.
> The solution to coding errors in pages or components is not to wait
> until your testers (or end users) find the bugs, but to identify and
> fix the bugs early. That's called "engineering discipline" and the
> reality is that even self-professed "mediocre" developers can do it.
> Tapestry helps because it fails early and has great exception reporting
> to guide you right the problem so that you can fix it.
> Another factor here is enforced helplessness. If only Fred understands
> page B and he's out when it's broken, then all development stops
> waiting for Fred to get back. I hit this problem myself, years ago
> working on a large Struts application (those words give me the heebie
> jeebies now!). We had lots of code, a fragile and slow build process,
> and many little code "fiefdoms". I spent too much wasted time twiddling
> my thumbs.
> Nobody should "own the code"; if page B is is broken, Julie (who
> normally develops page A) should be free to fix it. Julie will need to
> understand the page B code well enough to fix it, but also you need an
> overall environment with shared source, no repository locks (that is,
> nothing that says "Only Fred can change this file"), and no management
> PHB's getting in the way. Pair programming is the best way for Fred and
> Julie to share knowledge so that they can understand each other's code.
> Even if pairing occurs only part time, it's very effective at knowledge
> transfer as well as ordinary coding.
> The idea that "mediocre" developers should use JSF as it is more
> tolerant of errors is absurd! Tapestry 5 is designed to improve
> productivity for all developers, by streamlining, simplifying, being
> smart and being concise ... not to mention live class reloading and
> best-of-breed exception reporting, which makes it fast to identify and
> fix those errors.
> If your doctor tells you to eat less red meat, that doesn't mean you
> should switch to a diet of fried chicken three meals a day! Likewise,
> if you have concerns with code quality from your developers, you should
> not switch to a less agile, more code-intensive, less supportive
> development model and hope to catch all the bugs in QA. Sweeping
> problems under the rug is never a winning strategy.
> Coming down off my soap box, I should also add that Tapestry 5.1 works
> a little bit differently than 5.0 in this respect, so it does (in fact)
> defer more of the page loading and validation until a link is actually
> clicked. This is more for performance reasons than to shield developers
> from application problems. Even in 5.0, the loading and validation was
> the "reach" from page A to pages explicitly referenced (usually via
> PageLink during the rendering of page A), so it's a highly unlikely
> case that a single error in a 1000 page application will keep the
> application from starting up, unless the start page of the application
> links to all 999 other pages.
> Re-reading the above post I can't emphasize enough: you can't ignore
> quality problems. Quality problems lead to development failures,
> schedule slips, missing functionality, low morale and high turnover.
> Saying "we don't have time to fix the quality problem first" is to
> ignore the the second law of Thermodynamics. You are expecting a
> miracle, literally writing it into your project plan.
> Formos addresses this issue two ways: First, we use Scrum and deliver
> on (typically) 4 week cycles. Thus we set real deadlines and have a
> constant check on quality (we're providing working code constantly). We
> don't even try to predict what we'll be doing six months or two years
> from now, we just deliver a steady, manageable stream of software.
> Secondly, Formos uses Tapestry because of all the reasons that the
> anonymous developer's organization rejected it, and for many, many more
> reasons besides.
>
> --
> Posted By Howard to Tapestry Central at 6/16/2009 03:45:00 PM




-- 
Olle Hallin
Senior Java Developer and Architect
olle.hal...@crisp.se
www.crisp.se

Reply via email to