Spring FTL Conversion Spike

Goals

  • get hot FTL pages working again (fast turnaround when working on frontend)
    • eclipse: need to add resources dir containing FTL to build path and set preferFileSystemAccess to true. run mvn war:war in application
  • convert client savings account creation area to Spring/FTL
    • service facades in place so all data/behaviour should be available, if not we will need to tweak and happy to help/collaborate on this with stanley/whoever.
    • (Reached from Clients&Accounts tab, Create Savings account link on left side)
    • Create Pages:
      • Create Savings Account - Select a customer;
      • Create Savings account - Enter Savings account information (2 pages) ;
      • Create Savings account - Preview Savings account information
      • Edit Savings account information button from preview page
    • testing
      • unit tests (in memory) for Spring controllers (for significant functionality)
      • UI level acceptance tests - functional UI test in place - CreateSavingsAccountTest
      • schedule manual walk through of CSS with PM/QA/Dev.
      • manual UI test by QA on multiple browsers
    • use and document FTL templates
    • use and document code patterns
    • identify addition templates/patterns that are needed to accelerate work
  • identify whatever ways we can to accelerate Spring/FTL conversion
  • re-estimate total effort for conversion accross mifos based on single conversion from spike
  • faster testing?
    • Create API for createSavingsAccount - different spike assigned to Kojo:
    • functional UI test in place - CreateSavingsAccountTest - any rework involved with that test due to spike?
  • conversion of complete "vertical slices": front-end, services, tests, back-end
  • many devs working together, sharing knowledge, moving quickly

Stories

  • document eclipse FTL configuration for hot FTL pages
  • Proposal - One timeboxed story on FTL spike - MIFOS-4409  (to be completed in MIFOS-4573 )
  • Measure speed of migration of another area of Mifos. Compare established baseline (12 or so data points of historical LOC counts from git) with these new measurements.

Results

  • speeding up ui conversion
    • hot Freemarker and Java reloading enabled via Michael Vorburger's Workspace 2.0 (see also MIFOS-4099 )
    • unit tests of [spring] webflow
    • new, reusable Freemarker macros/widgets, such as the "progress tracker"
    • new, reusable datatables-based display of search results in create savings flow
    • better css classes (TODO: provide example)
    • improved ci configuration: faster feedback when builds fail

Measuring our speed improvements

"Speed of migration" will be rate of change of LOC of select source files (.jsp, *Action.java, *Controller.java, etc.) - comparing only jsp to jsp, ftl to ftl etc., over time (since we might expect, for instance, less LOC in ftl than jsp).

Measuring in this way will allow us to track a rough "burndown" of remaining UI code to convert (jsp and *Action.java LOC remaining).

Measuring testing effort

For testing related goals, we will measure on creating Center workflow:

  1. time spent modifying CreateCenterTest. For previous FTL efforts (ie: one "flow" (aka "wizard" or multi-step form), ensuring test verified all facets of page was not addressed. New Measurement: __________
  2. Number of issues (regressions) caught during CSS walk through. For previous FTL effort, number was zero since now walk through occurred. New Measurement: __________
  3. Number of layout or functional bugs logged during testing phase (missed during walk through). For previous FTL efforts, this was typically 5-10 issues. New Measurement: ___________
  4. Time spent by QA manually testing the feature, including logging issues and retesting bugs fixes. For previous FTL effort, similar sized FTL conversion would be approximately 20 hours. New Measurement: _____________

More potential dev tasks

  • technical improvements
    • enable instant reloading of Freemarker templates
      • (Stanley was saying he was able to hook it up to WTP and hot
        deployments?)
      • Michael Vorburger is also working on dev setup improvements, which
        includes the promise of instant FTL reloads
      • have early UI walkthrough on dev box with PM and QA
    • use JRebel
    • spend time summarizing and adding transparency to off-list work by
      Stanley Kwok & Michael Vorburger
    • could we use Spring Roo on top of Services/ServiceFacades?
    • better templates
      • reusable css pieces (use Compass?)
      • reusable ftl widgets
    • do pagination on client side with jQuery plugins such as http://www.datatables.net. Right now pagination is handled by TableTag class.
      • Looks nice, what paginates the query to the database in this case? see SavingsDaoHibernate.searchNotes and the NotesSearchResultsDto class,
    • standardize the location of web resources (css, js ...)
    • use SASS or Compass to manage CSS? for example, define the hex value of mifos orange in one place
    • construct breadcrumb automatically? some ideas:
  • measuring/managing the effort
    • as a control to measure against: estimate of how fast it's been going
      in the past e.g. Product Mix page took x days and had 23 bugs logged on
      new implementation
    • measures: what is the time required to build new FTL; how many bugs
      found by QA during manual testing; number of automated tests and time
      to write new automated tests
    • may need to measure twice - once on first try where we have trial
      and error, then second time with better defined
    • show how are new ideas are speeding up the process
  • team for sprint
    • multiple devs
    • fast feedback: tight integration w/testers
      • some testing happening every day
  • QA effort includes
    • new acceptance test for page (or fix/improve old test)
    • manual test pass to see if any bugs can be found in new FTL
    • seperate but associated spike on building API test for create Savings
      account
  • logistical/infrastructure improvements
    • make sure all devs have fast hardware / fast internet

Spring Web flow examples in application

Frontend development aids

See also