Great post Howard, can't agree more! having an application keep running when 
its inherently broken is indeed absurd... reminds me of a car I owned once 
where some of the parts (bolts off the engine etc.) kept falling out while I 
was driving... needless to say I am still here today because I kept fixing it 
every time before driving it again! Taking into account the eternal problems of 
varying programmer skill, as well as the 'human factor', a modular, testable, 
robust, and fail fast framework such as Tapestry is great win. 

Peter


----- Original Message -----
From: "Igor Drobiazko" <igor.drobia...@gmail.com>
To: "Tapestry users" <users@tapestry.apache.org>
Sent: Wednesday, 17 June, 2009 10:35:55 GMT +02:00 Athens, Beirut, Bucharest, 
Istanbul
Subject: Re: [Tapestry Central] Why chose Tapestry?

In the last years I battled for using Tapestry over JSF. There were a lot of
reasons why a lost the battle too often.
Most of them were non-technical but political. But this one is really
strange. It is not a question of a framework, it is a question of how you
develop you apps. As Howard already pointed out, they should write tests.
Companies, which do not write tests, suck.

Just image the same developer, who broke the page B a of a Tapestry app,
corrupts the central faces-config.xml of a JSF app.
Let's say he changes the scope of a managed bean from session  to request.
In this case the whole app is not working.

Another scenario is rafactoring: image you moved a component to a new
package but forgot to change the package in the faces-config.xml. In this
case there are more pages not working.

I would say you have much more places in a JSF app to make the app not
startable.

On Wed, Jun 17, 2009 at 1:20 AM, Howard <hls...@gmail.com> wrote:

> 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




-- 
Best regards,

Igor Drobiazko

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
For additional commands, e-mail: users-h...@tapestry.apache.org

Reply via email to