Daily Scrum (2014-05-13)

What did I do last time?

Progress has been steady on my little loan servicing program.  I debugged the code that imports data from MLP2 portfolios.  It's now at the point where it typically imports without a hitch.  Eventually I got it to fully import all the template information so now I have templates in the system to try to print.

The system that matches the loan data up to the tags in the templates needs an overhaul, and the statement system as a whole will get a pretty big revision.  I was surprised to see the first draft of the new statement printing dialog during testing.  I wrote it probably more than a year ago and had forgotten that I had been working on it already!  There's a bunch of new options for emailing statements.

Initially, MLP3 will require loan servicers to use their own mail servers.  Typically, if you have internet access, your internet access provider also provides a mail server for you to use along with a few email accounts.  

Once I can ease up on MLP3, I'll devise an elegant solution to provide the email functionality through TrailsWeb for people who don't have access to a mail server.  There are a lot of factors to sending email reliably.  I need to make sure whatever system I create works well for everyone while keeping clear of blacklists and greylists.  In the six or seven years I've run my own mail server, I've had a handful of major service headaches.  Most recently, a customer forwarded me a phishing email to ask if it was a scam - and when I replied, their ISP (who was all too happy to send that same phishing email to my mail server) banned me for sending a phishing email!  You never know what weird things are going to get you blocked, and it changes all the time.

What do I plan to do today?

I roughed in a new set of structures to handle the various ways that tags are converted during printing… tags that just substitute text, tags that format numbers and dates, tags that pop up question dialogs, tags that do more expensive calculations on the fly but only if the tag is actually present in the template, and a few others.

Also, Moneylender 3 has a new template type for printing checks, but it's not going to be much work to add them to the system.  There will be a few places across the program where they'll get used.


The move to NY is less than a week away.  We've been packing and the mess in my office is in a different shape than I'm used to.  ;)  But today's work should go pretty smoothly.


Daily Scrum (2014-05-08)

I know these posts get read by a relatively small number of people, but I want to put it out there now: I need some help with the Metro2 part of Moneylender 3.  If you're using Moneylender 2 and reporting to the credit bureaus, please email me at support@trailsweb.com if you're willing to help me iron out Metro2 functionality in Moneylender 3.  It'll be another four or five weeks until I'm ready to start working on Metro2 support in Moneylender 3, but I want to get things lined up so development can go as efficiently as possible.  Thanks!

What did I do last time?

Yesterday I worked on writing the system to import records from MLP2 portfolios into MLP3.  That system mostly works now. 

Also, as a side effect of developing the import routines, I improved the user feedback of the reindexing process to include a progress bar.  In production, reindexing takes about one third longer than the time it would take to read the whole file.  A portfolio with 600 loans might take one or two minutes to reindex.  In development, reindexing takes about four times longer because of the overhead the debugging environment adds to the partial decryption process. 

What do I hope to do today?

Now that data is importing, I have access to the template records in the new program and can start debugging the statement system.  Additionally, I'll be adding a NumberOfPages setting so users will be able to create templates that are comprised of several pages.  

I still need the import system to split payments from MLP2 into payments and adjustments in MLP3.  I hope to have that written today, also.  I hope to start using some of the more recent real portfolios that I have to do further testing on the loan calculator.  I'll be doing a side-by-side comparison of MLP2's loan balance calculations with MLP3's to make it easier to identify where the calculations are different.


None that I can think of.  The bills are paid, the coffee pot's full, I'm excited to see so much progress on MLP3 after so many years of slowly putting the pieces together.  A recent cluster of sales set a new record for most licenses sold in one day, which is just the icing on the cake.


Daily Scrum (2014-05-07)

What did I do last time?

I did a bunch of work on Additional Fees.  I worked up the form that now allows for fees to be marked as recurring and to set the recurrence schedule.  The creation and management of fees is set up, but it still needs to be tied into the loan calculator properly to do what it's supposed to. 

I also tested and fixed the ability to set a password on a portfolio.  When creating a portfolio you can specify a password to open it.  Once set, you'll never see your data again… unless you enter the password exactly as you set it.  Seems to work very well.  To change the password on an existing portfolio in MLP3 is a lot more code, and that code still needs to be written.

I also started working on importing templates from template files, but quickly switched to importing MLP2 portfolio data since that'll include templates and is a much more important task.  I had written an upgrade system for MLP 2.5, but MLP 2.5 was abandoned in favor of making the leap all the way to MLP3.  Some of that code doesn't convey, but some of it - like choosing which 3rd parties to treat as loan servicing fees and which to treat as escrow charges is still quite useful.  I have the UI set up, and some small parts of the code that actually converts records written, as well as a nerfed copy of MLP2's file portfolio system to allow reading the records from the old portfolio format.

What do I hope to do today?

I hope to get data from MLP2 portfolios to copy into the MLP3 format!!!


We're moving from Pierre, South Dakota to Rochester, New York in a week and a half, so there's probably some packing and other stuff I need to do for that change.  It's a pretty major relocation, and has taken a lot of preparation and money.  The contract negotiation I was in has ended without reaching an agreement.  It's great news for Moneylender users because I'll be working full time on MLP3.  Effective immediately, phone support is available five days per week!! (Except the week of the 19th when I'll be driving to NY)


Daily Scrum (2014-04-29)

What happened last time?

I got the overpayment for early payments to work for a limited number of scenarios.  I very poorly reworked the Lender Wizard.  It'll need a real rework sometime later. 

I also got a basic Payment Detail report working.  Moneylender 3's reporting is probably going to be driven by Microsoft's Reporting Services.  I was able to feed some of the loan data into a report template and do a little formatting on that template to get it to display properly.  Because report templates are XML files, it'll be possible to allow the program to run customizable templates.  The templates can even contain formulas and calculate info directly in the report.  My hope is that using this reporting standard allows greater flexibility and more customization for the people who want their reports to match a specific format.  And, built into the report preview is the option to create Excel, PDF, and Word versions of the report and change the printer settings and print the report directly.  The report runs immediately when the date range is changed.  It has a much more immediate feel to access to the information.  Hopefully the more complicated reports still run very quickly.

The way the new loan calculator works, more complicated reports should run very efficiently because the calculator makes a permanent running record of each transaction as it calculates a loan.  That saves the reports from having to do their own temporary calculations to get those intermediate tallies.

The very marginally functional reporting capabilities of Moneylender 3!

What do I hope to do today?

Now that reporting marginally exists, I'm going to see about getting fees and escrows working.  I might work on importing MLP2 portfolios into the new MLP3 format, too.


The day is wide open.  Everything that needs to be dealt with has been dealt with. J


Daily Scrum (2014-04-24)

What did I do yesterday?

I worked on various parts of the program that weren't working right.  And then I bumped into a part of the program that's new in MLP3, which requires a lot more thought and design to make it work…

In Moneylender 2, you have to enter two dates for each payment.  The date applied tells Moneylender 2 when it's ok to advance to the next payment due.  The Date Received tells Moneylender how to handle the payment for that due date.

Moneylender 3 will be much smarter.  It will decide for you how to split up the payment and advance the loan.  Sounds cool and convenient, right?  The reality is that it's a very complex process.

I distilled the process into three patterns.

  • Full Carryover - similar to MLP2's "Allow overpayments to carry over" setting.  All payments pay the loan forward, so if they pay $10000 with only a $1000 monthly payment, the account would be paid for 10 months into the future.  There are many lenders and loans that will use this setting.  It's also great if the borrowers pay a little more sporadically and aren't really trying to get ahead.  Moneylender 3 will keep everyone informed of when and how much the next payment needs to be on the loan.
  • No Carryover - using this setting is like making the Payment Date in Moneylender 3 behave like the Date Applied in Moneylender 2.  Lenders and servicers can shuffle the payment date around a little bit and have exact control over when the payment is credited to the loan and how that advances the loan to the next cycle.  If a payment is recorded for the 28th of the month, MLP3 will still be looking for a full regular payment on the 1st a few days later.  Moving that same payment to the 1st will tell MLP3 to apply the funds toward the amount due for that due date.
  • Allow Early Payment - this is the tricky one, isn't it?  All of these scenarios only matter when the payment amount is greater than the amount presently due on a loan.  If the payment is due on the first and the borrower submits their payment three days early, we want the loan to show as paid for the 1st.  Using a variety of checks and calculations, Moneylender 3 will determine if overpayments should be treated as extra principal in the current cycle, payment for the current cycle and the next cycle, or payment for the current and next cycle and some overpayment in the current cycle as well.  If the borrower owes $100/month, and is paying the current month late - MLP3 will identify a $200 payment as payment for the current month plus the soon to be $100 for next month.  If the payment is $150, Moneylender 3 will treat it as $100 for the current month with a $50 extra payment amount in that month.  If it's $350, MLP3 will treat it as $250 in the current month, and $100 for the next month.  If the borrower is paid current and submits a payment before the due date, MLP3 will allow that payment to count towards the upcoming due date.

So that's what consumed much of my time yesterday.  The algorithm isn't fully coded yet but I think the architecture for it is sound.

What will I do today?

Today I'll be finishing up the coding on the Early Payment stuff and testing it to see if I get the desired results.  Hopefully that'll bring me another step closer to being able to service a loan in Moneylender 3.  I'll pretty much be spending the day coding up the loan calculator and then running it to see what's not working or where my logic is wrong.  Hopefully I'll get another step closer to being able to service a loan in the program.


It's really difficult.  The loan calculator is very challenging compared to most of the programming work I do, and there are many parts of it that must work in concert to get the correct numbers without using a ton of memory and processor power to do it.  It's not going to be easy, but I do love logic and math.  So the only roadblock is the road itself.  Woot.


Daily Scrum (2014-04-22)

What did I do yesterday?

I dug into the loan calculator to fine-tune the dates it selects for ending calculations and determining how current the loan is.  I did make some good progress, but there's still more to do there.

What do I plan to do today?

Get the Next Payment Number and Date to accurately reflect the status of the loan for loans that are behind or ahead, and get the corresponding Amount Due.  Have the Amount Due respect the "Overpayments carry over" loan setting.


I have a little bit of paperwork today.  I'm still adjusting to working from home full time.

Loan Servicing Commentary

I made a list on my whiteboard of any features that are not yet in a usable state from the program.  As I work through parts of the software, I've been adding things to the list as I bump into them.  It’s getting to be a pretty long list!  If I treat this list as a product burn-down from scrum, it'll give me a good idea of how much work is left before Moneylender 3 is a fully functional loan servicing product.

According to my gross underestimation of the time it'll take to complete the stuff on the board there's about 40 days' worth of full-time development to do on MLP3 to get the beta ready for people to try out.  If I were being more cautious, I'd say it's closer to 80 days' worth of development.  I have about 135 development days before my next contract picks up, so I should be able to release Moneylender 3 beta so people can actually start servicing loans with it.  It would be very good to get feedback from users while I still have time to commit to continuous development so any issues could be resolved immediately.

2014 may indeed be the year for MLP3 after all.


Daily Scrum (2014-04-21)

What I did last time…

My last scrum post pretty much sums up the work I’ve done so far.  I started putting together a list of the main things that need to be working before releasing MLP3 beta.  It’s looks fairly daunting at first glance.  The reports are getting a complete overhaul that has yet to occur.  Statements have been most reworked.  The loan calculators are going to take some real work, too.

What I hope to do today…

I’ll be working on Moneylender 3 all afternoon.  I’ll be focusing on buttoning down the practical aspects of servicing loans ensuring the daily tasks - like recording payments, checking balances, and keeping track of what statements have been sent and to whom - are easy and intuitive to access.


Nope.  Got a wide open schedule, which is pleasantly liberating.