November 15, 2007

The Distributed Demo

A letter to the extended team/business/qa mailing list:
There we were... 20 minutes to a 1pm demo. All was set the night before... some "safe" last-minute changes requested by the business analyst (Marc -- in NJ).

scrambling to figure out why we suddenly couldn't get [insurance thingy] RQAs to open, or to rate when they worked an hour ago. i (in PA) make some DB changes, cross fingers, try to open an RQA to test
[DB and App running on servers in the middle of PA]
12:46 <markhanson> i am about to faint [Mark is in CA]
tick, tick, tick
nothing
crap
12:56 <mmatrix>T-4 [mike is in CA]

(mike is viewing the demo via netmeeting and reporting to us.)

i flip caching back on
hell with the test, trust in the force
12:59 <mmatrix> uhoh; faultString (String): java.lang.StackOverflowError
and much else followed that i can't print (*I* only said 'crap' on IRC!)

13:00 marc and harry start demo presentation in New Jersey...

at 13:03 I realized smth was up with Questionnairre #3's meta data
i point some of the sql scripts that mark wrote long ago to help ensure qstnrs were properly formed...
bang, an errant condition for one of the rules! darn!
13:11 somehow, the choice that the condition was looking for lost its question!
mark: how did that happen?
jon: [shrugs in PA] probably me
I make a quick change to the DB to fix
13:15 <mmatrix> they are demoing right now :-(
13:15 <mmatrix> (it's like watching a train wreck in slow motion.)

jon: editng the RQA... waiting... it worked! Questionnairre is healed.
jon: okay, cache back on. do we need to bounce the server?
mark: no, just re-open RQA two more times and it will be cached
jon: cool, i am editing the RQA a 2nd time now
13:16 <jonkern> i am still waiting for a response [the RQA to return]...
13:16 <jonkern> app is transferring data now
13:17 <mmatrix> waiting for what? Do they [marc & harry] know about the problems?
13:17 <jonkern> got it! [The RQA]
13:17 <mmatrix> He [Marc] just did a create new
13:17 <mmatrix>
mark: hurry jon! hurry before Marc hits CONTINUE button
13:17 <jonkern> trying it [editing RQA] again now for 3rd time
jon: someone slow marc down for a few seconds! (I joke)
13:17 <jonkern> FAST, SWEEET!!
13:17 <markhanson> and marc hasn't hit continue yet!!!!
13:17 <jonkern> and all without the usual demo rodeo clowns
13:17 <mmatrix> will it be too late?
13:17 <jonkern> nope. it [RQA] comes back fast now (<10 seconds)
13:18 <mmatrix> JK, if this works it will be the closest I have EVER seen a demo be cut
13:18 <mmatrix> he is creating new
13:18 <jonkern> ignore the men (and lady) behind the curtains
13:18 <mmatrix> hasn't continued yet
13:19 <markhanson> i am lol and pinching myself to not lose consciousness
13:19 <mmatrix> here he goes
13:19 <mmatrix> doing BOP [a type of insurance line of business] it looks like
13:19 <markhanson> he hit continue
13:19 <mmatrix> ... looks for a place to hide
13:19 <jonkern> did it come back fast???
13:19 <mmatrix> no
13:20 <mmatrix> still nothing
13:20 <markhanson> came back
13:20 <mmatrix> it is BACK!
13:20 <mmatrix> son of a GUN

Major applause and cheering from us!

And much more merriment was had when marc did rate the sample insurance applications and premiums were returned, and he made changes to the quote and re-rated and got different premiums. Sweet, the core concepts of the application were just proven. Yes, we can put a modern RIA front-end on a Phoenix back-end and get penny-to-penny match on the premiums!

Reflecting back... Mike was giving play by play description in the phone of the demo and what marc was doing. Mark was also talking to me on the speaker phone (and eventually other developers joined in). All the while, it struck me as listening to the Apollo lunar landing as someone was watching it, or being in mission control with different folks checking in, but I myself not being able to see.

What a rush!

Harry's words sum it up:

  • The company is confident that we can deliver the tool to the agents to deliver small commercial insurance.
  • The company has given us a good report card in terms of what they were looking for.
  • Andy [President] is supporting us to the nth degree

[Team,] on tuesday afternoon you told me we could make thursday COB for friday QA build. We actually hit the goal on Wednesday afternoon (especially once Andrew discovered missing LOBs on TEST), and left Thursday morning for cardio exercises:

  • Ken innocently twiddled the main application file,
  • Jon and Mike added something to the qstnr for Marc only to realize it didn't work and had to back it out, and
  • Jon missed one choice's assigned question and broke the qstnr!!

Who needs espresso?

Savor the moment... there will be more, but this was a good one. Be proud! I am -- of you.

Posted by jon at 11:34 PM | Comments (0)

November 04, 2007

What is Design?

Some recent discussions revolved going back and forth on DESIGN.

For me... design is a multi-faceted thing... Sometimes it is a very high-level part of the overarching theme of what drives an application's details. Generally, the design is the means by which superior business advantage is gained by our clients.

  • For an insurance agent portal application (gather data about the insurance requirements and submit...) we are building now, one of the running jokes is "Everything is a Question." That is because my overarching design of the system is a domain model surrounding the questionnaire aspect of the system. Add to the questions meta data for the rating system (to auto-generate the XML stream for rating). The entire UI is driven dynamically by the questions set up in a questionnaire -- the sample questionnaire that demonstrates all API features and rules is a Diner! Need a piece of information sent to the backend rating system? Create a hidden question and some rules to assign the answer. Need a fancier UI for some questions? Add a CUSTOM_UI meta tag and the UI will kick off a different component for that question(s).
  • For a patient clinical summary system we designed, the overarching technical aspect of this design was the "Form" -- basically a set of information needed for a patient. Working backward from this request, the proper data was pulled in by autonomous agents, shoved into a "worksheet" for processing. This multi-agent system used descriptive "Semantic Web" technologies such as RDF and OWL for knowledge representation, mapping, and processing.
  • For a fire department web-based preplanning system, i used a very brute force technique to implement 50 domain objects in J2EE. Though the 2-tier menu system is table driven, the bulk of the beans are repetitive. Yes, I thought about MDA. Yes, I thought about building it in a completely meta driven manner. But, this was a homegrown, entrepreneurial project, so we used a proven and simple technique that I could deliver more rapidly.

For the first two cases above, the combination of design ideas, sketches, wiki explanations and code will give you the fastest ticket to joining the team and becoming productive.

For the 3rd example, you could jump in on examining source code for any of the 50 objects and know all there is to know about the design and start coding.

design is in the eye of the beholder also... the facets of the design that you choose to share are generally for a specific reason. Maybe for the stakeholder to understand the business value that an advanced design provides... Or, a combination of showing the application architecture + the domain models + code samples for the entire set of layers for the technical architecture is what is best for developers. To discuss the UI design, that is a whole other ballgame.

Another way I like to think about folks (like Ron Jeffries) considering the "Code IS the design:"

  • code is reality
    design is intent
  • sometimes the two are the same, often not quite... at least in my reality.

    just remember, don't over design, underdocument, and overcode.

    Posted by jon at 02:01 PM | Comments (0)