07.20.2011 Developer Meeting
Agenda
- Discussion on Mifos Architecture post Maya G - re-architect vs. rewrite
Who Attended
- Keith Woodlock - Ireland
- Kojo Gambrah - Ghana
- Krishnan - India
- Udai, India
- Ed Cable - Seattle, USA
- Adam Monsen - Fargo, USA (via typeWithme)
Notes
Live notes from the discussion
Notes (in wiki)
Weekly Developer Meeting - 07.20.2011
On the Call:
Keith Woodlock - Ireland
Krishnan - India
Ed - Seattle, USA
Kojo - Ghana
Udai - India
Adam Monsen - Fargo, USA (via IRC/typewith.me only)
Discussion Topic: End Objective of Potential Mifos X
Exceed the current level of functionality of Mifos
Current architecture of Mifos make it too difficult to build new features
Some features could be added to existing codebase.
Effort/investment to continue with refactoring outweighs rewrite (too much technical debt)
Too difficult for people to get on code base and deliver value.
Medium-Long term play
Krishnan: should we add these features into Mifos today or in Mifos X?
Krishnan: thinks it will be difficult to bring current customers over to Mifos X - need migration tool.
Krishnan: what is current progress?
Van: Spring/Roo
Keith W: Spring-based app & Java
Mid-August: demo of loans/clients functionality on new version.
Difficulties with Current Codebase:
KeithW: everything is pretty much wrong from architecture perspective with current Mifos.
Learnings we're starting with:
Krishnan: What are some of these difficult features that are mising?
KeithW: Meeting dependencies, flexibility of loans/scheduling
Better integration amongst savings/loans
Meet more needs of SACCOs, SHGs
Krishnan's missing gaps (Mifos must do better)
Reporting:
Better integrated support for reporting - shouldn't have to use separate tool to do fairly flexible reporting. Reporting is what MIS ultimately means to end users
Be able to create reports without different tools, architecture, framework, separate set of tools.
Udai: what tool in mind? How do you solve problem without using separate tool?
APIs
Can't create flexible and functional API with current codebase (lot of effort not useful over long period of time)
KeithW: good amount of work getting service facades across Mifos but proper APIs still require a lot of effort.
Accounting
Don't have any accounting functionality in Mifos so anything we add would be a bonus.
KeithW: not looking at it straight away.
Krishnan: early idea - accounting can stay independent of MIS/transaction handling capability - stand alone application to take care of most accounting requirements which has interface that is flexible enough for Mifos or other product to communicate with (use message queuing, batch communications, different kind of things)
Build accounting engine which resides and runs indepenently and be integrated with mifos to serve its needs.
Changes be made to accounting while Mifos has a fairly stable interface to it.
Develop a standard accounting interface for microfinance.
KeithW: should accounting pull infor or MIS push information accounting app.
Udai: Lots of code will be lost if do complete rewrite - will you be integrated code from existing modules?
KeithW: whereever we can reuse we will.
Udai: in Mifos itself, we've completely replaced code (i.e. remove Struts) and breaks other functionality.
Why not just rip out bad code from current Mifos rather than restart from scratch?
KeithW: mifos over-engineered at every level (400 independent acceptance tests)
rewrite: not a technical exercise with rewrite - focus on getting product right.
Krishnan:
Code that models domain, entities, etc.
Code that looks at how loans, interest, payments scheduled.
Modules that we can take from existing Mifos:
KeithW: little beyond question groups.
Krishnan: other volunteers can work on different aspects
Flexibility around loans:
Someone who thinks about loans module should be designed has smaller challenge than thinking about how entire architecture should look and work. Reasonably self-sufficient things that can be dropped in new product architecture.
Tons more flexibility with loans required with way microfinance has been shifting/evolving (especially in India)
Using Git:
Release faster and frequently, allow customers more flexibility in working with code through git.
Do current customers (like GK) have their own git branches?
KeithW: we have release branches and master branch but no customer-specific branches.
Use git to respond to customer needs much faster.
Krishnan: can have certain git branch for new features.
Udai: can use branch by concept/feature - can directly cut a branch with feature using a feature toggle.
Krishnan: branch per customer. Udai: fear that diverge too far from master, risk of not merging back into main branch.
More stable branches for customer - not having to have bleeding edge code from master.
can try features in much easier manner.
What Language will be will be build in?
Spring/Roo is pretty close to Grails in terms of philosophy.
Krishnan: not too confident in Groovy - not stable enough to build entire software in.
Big Bang vs. Creeping Approach
KeithW: been doing incremental, building on top but can't behind design flaws at the core. Too long to fix everything which is needed.
Reporting Architecture:
How do we achieve this flexible reporting without separate tool?
Programming, UI-based?
Krishnan: For MostFit, ORMapper - easy to create relatively complicated short amount of time - focused more on what you want out of report rather than code to get report.
Focus on Functional Logic: 90% of code to generate new report - queries to find out about loans, status. Not too much time for SQL.
Udai: similar to a DSL for reports? --> Krishnan: use models (ruby's eqivalent for java class)