You are viewing an old version of this page. View the current version.

Compare with Current View Page History

Version 1 Current »

Welcome everyone!


We are going to be talking today in this session about Apache Fineract!

First off let me introduce myself.
 
  • 17 years of programming experience in Java and C++

  • Specializing in API design, and microservices architecture

  • Solutions Architect at Mifos Initiative

  • Working primarily on the re architecting of Apache Fineract into REST microservices.


 

Some people think banking software is boring.  Or even unimportant.  So let me start by asking you a few questions:

 

 

 

Who here has ever borrowed money? (For example, to pay for your education, or a house, or to start a business, or to get through an unexpected emergency)

 

Who here would not be where you are today without having had that opportunity?

 

 

Who here is saving money for your next vacation? Who here is saving money for a child’s college education? Who here is saving for retirement?

 

 

Who here payed for all of your travel expenses for this conference with cash?

 

 

So you all use financial services pretty regularly. Think about all the ways you use banking services and ask yourselves this question: Would you be able to live the life you live without them?

 

 

2 billion people in the world today do not have access to financial services that we in the first world take completely for granted.  They can’t start a business, even if they have an idea, because they can’t borrow money to pay for equipment and supplies.  Or they have to pay for seeds for their crops with cash which is hard to transport and easy to steal and forge.

 

4 billion have inadequate financial services.  They have to pay excessive fees to handlers in order to transfer money home to family.  They can borrow money, but the only savings account available to them is the tin can buried under the third tree on the right.

 

In 1976 Muhammad Yunus, noticed that village women in the village of Jobra had to take out usurious loans to buy bamboo, which they were using to build furniture.  Traditional banks didn’t want to make the loans because of the high risk of default.  Yunus lent $27 dollars to 42 women in the village.  The women made a small profit on the loan and repaid Mr. Yunus.

 

 

Microfinance was born.

 

Microfinance institutions provide very poor people with financial services such as loans, savings accounts, and money transfer.  Before Mr. Yunus, these services were believed to be too expensive, or too risky to provide to the poorest of the poor.  But, as Muhammad Yunus has said: “You need a dollar to catch a dollar”.

 

By October 1983, the project was turned into a full-fledged bank named the Grameen Bank, with an emphasis on lending to poor rural women.  In 1997, the Grameen Foundation was founded as an umbrella organization for banks outside of Bangladesh.

 

 

Microfinance  lifts poor people out of poverty and it costs very little.  It can even be profitable.

 

  • 55% of Grameen customers who remained customers for 5 years or more exit poverty.

  • The average credit write-off rate is 1%.  The average overdue rate is between 3 and 6%.

 

 

The reason it works is because at the base of it, poor people are no different than rich people.  We all want to feed ourselves, take care of our children, and contribute to our communities.

 

For his work helping poor people lift themselves out of poverty, Muhammad Yunus was awarded the Nobel Peace Prize in 2006.

 

 

By this time, not just the Grameen Foundation was involved in microfinance.  The sector was exploding with new businesses, NGO’s, and creative new ideas.


 

It probably comes as no surprise that there’s a lot of mundane math involved in running a bank.  Interest compounding, repayment calculation, balance sheets, allocation of allowances for overdue loans, etc.

 

 

Big banks use expensive closed-source systems and amortize their costs over millions of relatively wealthy customers.  That approach is not available to typical micro-finance institutions (also known as MFIs). They just don’t have the funds available.  Any infrastructure costs they have must to be payed in the form of interest and fees by their clients.

 

 

Open-source developers have seen this class of problems many times before.

 

 

The Grameen Foundation began developing software in 2004 because of the shortcomings of the software solutions available to MFIs at the time.  They called it Micro Finance Open Source and shortened it to Mifos.

In 2011 the Mifos Initiative became an independent non-profit organization which coordinates a community of software professionals, and MFIS to support the development and deployment of free open source software. Co-founded by Ed Cable, Paul Maritz, and Craig Chelius

Fineract was accepted into incubation at the Apache Software Foundation on December 15th 2015.  The Mifos Initiative donated the code.  The Mifos Initiative continues to pay for some of the development on Apache Fineract.  Some development work is also provided by regional service providers like Musoni and Conflux.

Now we are looking to support the next generation of financial inclusion products.  The next revolution already underway is in mobile money.  Mobile phone use has topped 60% worldwide.  Feature phones are available to the poorest of the poor, because they do not even require access to a reliable power source. 2G Network coverage has topped 95% of the world population.  A report from the McKinsey Global Institute found that delivering financial services by mobile phone could add 3.7 trillion dollars to the GDP of developing countries by 2025. That’s enough money to create 95 million jobs.

So by now, you’re wondering what any of this has to do with you.  

How many of you are open source developers?

How many of you consider yourself idealists?

Are you interested in attacking world poverty at its roots?

 

Then come join us!

 

 

Build up your resume

 

  • Get a start in Fintech -- the current up-and-comer in the technology world

  • Become more financially literate.

 

 

Gain programming experience:

 

  • Try out the CQRS design pattern.

 

  • Work together with diverse team members.  The only continents we don’t have contributors from are Australia and Antarctica.

  • Program for environments with low network reliability.

 

 

Promote open source culture in finance

 

  • I believe that finance 2.0 will be more open.  There will be more peer 2 peer lending which encourages community development and fairness.  Banks financials will be more transparent.  Money transmission will be fast, cheap, and verifiable.  All of this will contribute to a more stable and fair world financial system. We, in the open source community have great, world-changing ideas about how and why people collaborate.  The financial industry with its tremendous contribution to human well-being needs those ideas and those ideals from us.

 

 

Give back to the global community

 

  • According to McKinsey three things are required: “widespread mobile and digital infrastructure, a dynamic business environment for financial services, and digital finance products that meet the needs of individuals and small businesses in ways that are superior to the informal financial tools they use today.” Our work can make this revolution possible.

  • The people who benefit the most from this work, are those who are too poor to get service from traditional banks.  Apache Fineract reduces global income inequality.

 

Some of the technologies used:

 

  • Java

  • MariaDB/MySQL via OpenJPA

  • Spring Platform, Mockito, JUnit, tomcat.

 

 

Patterns used:

 

  • REST (Client-Server -- HTTP(s)-based, Stateless -- actually sessionless, Cacheable, layered, Resource-oriented)

  • Command Query Responsibility Segregation

  • Multi-tenancy

 

As promised I’d like to give you a brief explanation of CQRS.  For a more detailed explanation, Martin Fowler has an excellent article online.


 

As you all know all programs accept input from end users,...

..and display data to end users.

But users commands, and users queries do not need to be processed in the same code paths, or represented using the same domain objects.  Using different paths and representations can have some advantages

For example, commands might be saved in a system which is optimized for writes more than for queries such as a NoSQL database.  Write operations don’t need to block read operations.

Coordination between the two can be achieved with an event queue.

One added benefit to this is that, since changes are separately stored, it is possible to examine the series of transformations data has been subjected to.  This makes the system auditable, because we know who changed what when.

Multitenancy

One bank consists of multiple employees and (hopefully) customers.  These employees, and, to a lesser extent, their customers will wish to access the bank’s data.  The bank’s data is stored by Fineract in an SQL database

...but what happens when you have multiple banks, or multiple MFIs sharing the same Fineract installation?  How do you keep data from one financial institution from slipping into the request response intended for an employee of another financial institution?

Fineract solves the problem by creating one database for each financial institution.

An employee of one financial institution can access only the data for that FI, and not for the others.

Remember we have 4 billion un- and underbanked human beings on the planet.  To connect them to each other financially, the world needs

  • financial systems that make efficient use of resources while still being able to scale up,

  • financial systems that are customizable to a wide variety of local needs,

  • and financial systems that can recover robustly in minor outages and in catastrophes.

To meet these needs, the Mifos Initiative is currently working on a re-architecting of Fineract as a cloud-native solution.

This means taking the current single Mifos application...

...decomposing its functionality into its parts...

...finding the natural functionality groups...

...and composing these into REST microservices.

This way, we can spin up more instances of a microservice if its functionality is more in-demand, and reduce the number of instances when it is not.

We can upgrade or replace individual microservices when custom functionality is needed (for example if a bank serving Muslim customers wishes to offer a Shariah-compatible loan product).  And through blue-green deployment, we can do so without downtime.


  • No labels