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:
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: __________
Number of issues (regressions) caught during CSS walk through. For previous FTL effort, number was zero since now walk through occurred. New Measurement: __________
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: ___________
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 reloadshave 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 Vorburgercould 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 implementationmeasures: 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 testsmay need to measure twice - once on first try where we have trial
and error, then second time with better definedshow 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
user.xml (not yet brought into application)
createQuestion.xml
http://mifosforge.jira.com/wiki/display/MIFOS/How+To+Add+a+Flow+To+Mifos
Frontend development aids
Workspace 2.0
Install Eclipse Freemarker editor: http://freemarker.sourceforge.net/editors.htm (get JBoss Tools).
Install Firebug (troubleshoot CSS issues quickly and easily): http://getfirebug.com
See also
UI Technology Guides (and its children, especially How To Add a Flow To Mifos)
How to make new UI development take less developer time (brainstorm? or something we apparently did a while back)