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.


Daily Scrum (2014-04-19)

What happened last time?

It's been two weeks since I posted progress.  In addition to various jobs for other customers I've managed to make some good headway on Moneylender 3.  Here’s a list of things I did:
  • Make settings in Portfolio Settings propagate to the program when settings are saved.
  • Looked into setting up localized resources.
  • Worked through Loan Wizard, updating layout and labeling.
  • Added currency and rate formatting to records in the list of loans.
  • Added currency align to left or right of number.
  • Added message that appears when portfolio indexes are being rebuilt.
  • Portfolio properly marks indexes as out of sync as soon as it opens so the indexes are rebuilt if the program is closed abnormally (abnormal closing happens constantly during development, and is pretty regular when the program is left open and Windows Updates install automatically).
  • Rebuilt borrower wizard to allow larger dialogs – consolidated the addresses into one dialog.

I've been starting the program and going through the process of setting up a normal loan.  When I hit a part of the program that doesn't do what it's supposed to, I go fix it and start over.  It's a good way to make steady progress toward a usable product, now that at least the bare beginnings of the loan calculator are working.

What I plan to do today…

I may or may not have a 40 hour/week commitment anymore.  There's a fairly hostile negotiation between me and the company that was paying that commitment.  In the very likely event that falls through, I'll be spending my full time working on Moneylender 3.

My immediate plans are to continue to focus on turning Moneylender 3 into a working loan servicing product and to expand its mathematical capabilities to match Moneylender 2.


If the deal with this other company becomes some entrenched battle that I’m required to participate in, it may affect the amount of time I’m able to spend on MLP3.  If the current arrangement disintegrates quietly, I should be making large and steady strides toward a MLP3 beta release.  If, by some miracle, a suitable agreement is made, I'll be working on site with a different client 40 hours a week and developing MLP3 on Fridays still.


Daily Scrum (2014-04-04)

What I did last time…

I working in MLP3 a lot.  I fixed several small things: auto-opening portfolios, the default grace period, made a small tweak to the file system, designed a new icon for MLP3.  Additionally I did a lot of testing on the parts of the loan calculator that are written and fixed several bugs and added a couple things.

On a side note, someone bought two copies of MLP2, spent six hours entering their data into it, and when they returned the next day, there was no evidence of their data anywhere.  Obviously unhappy, they requested a refund (which I issued immediately).  Although there’s a good chance the loan data is still on their computer and recoverable, if I had that experience with a program, I would definitely not ever trust or use it again.

Moneylender works with hidden temporary files while a portfolio is open, then copies the temporary files onto the .mlp portfolio file when the program is closed.  This is usually fine.  If moneylender is left running on a computer that reboots for an automatic update in the middle of the night, it might not get to close the portfolio and when the user begins to use the program they’ll get a message asking to use a temporary file or ignore the temporary file.  Use the temporary file and everything is great.  The details of what happens if a user ignores the temporary file get a little tedious, but the results could range from losing the last day’s work to losing half or all of your data.

Now, for this very unfortunate person, this happened on their first use.  Moneylender had only been working with the temporary file and hadn’t written the .mlp file at all.  When they reopened Moneylender the next day, there was no portfolio to try to open.  Their data, in a hidden file, wasn’t visible anywhere and the very reasonable assumption is that it’s gone forever.  I’ve known about this vulnerability for some time, and it’s the main reason I’ve been building MLP3.  The new file system eliminates the temporary files completely.

Needless to say, I’m utterly embarrassed to have this happen to someone.  Although I could’ve recovered their data for them, if it was you, would you want to keep using the program?  I pride myself on providing a quality product that outshines the competition.  The feedback I get from people who email customer support with questions and problems with the software is overwhelmingly positive, but these rare instances where no amount of technical prowess can repair their shattered confidence stand as stark reminders that there is still much work to be done.

I truly appreciate all the customers who have had a problem and patiently allowed me to walk with them through the solution, and I respect the ones that have had to walk away.  Even amidst seven very satisfied customers praising the product and the support they received this week, the one colossal disappointment reminds me that there is yet much work to do.  I will continue to do my very best to provide the level of support and consideration I would hope to receive if the roles were switched.

What I hope to do today…

Pick up where I left off, rewriting the various forms to work with the new record formats and testing the loan calculator to make sure the settings are being correctly reflected in the loan balances.  Moneylender Professional 3 is still a far way off, but it is at least becoming a somewhat usable program.


None, it’s just software and design today.  Smooth sailing.

Services from Carpet Care Connection

Carpet Care Connection has more than carpet cleaning to offer Flagstaff. Though they specialize in residential and commercial carpet cleaning, they also offer blind cleaning and upholstery cleaning, as well as tile grout cleaning.

It’s time for spring-cleaning again, and that means dusting off those window blinds. Not only a tedious task, it is time consuming, and ends with a lung full of dust. That’s why you should call Carpet Care Connection, and let them deal with your dusty blinds. While they are already there, have them clean your upholstery too!

From cars to couches, Carpet Care Connection will clean any upholstery and make it look like new. They will rid your car seat and favorite chair of pet dander and hair, stains and unpleasant odors. That’s not all they can do, either.

Tile and grout cleaning is essential to making your house really shine, and Carpet Care Connection has you covered, yet again. There’s nothing worse than walking into a beautiful kitchen or bathroom, and seeing scum and mold between the tiles. Let Carpet Care Connection restore your tile floor to its original luster.

In addition to these other services and their spectacular carpet and rug cleaning and stain removal, they also do commercial carpet cleaning. Restaurants and hotels with carpets can look beautiful again with Carpet Care Connection’s incredible services. Grease and food ground into carpet can stain, smell and dull the look of a nice commercial space. That’s why they guarantee their work, and the proof is in the photos. Call today to find out how Carpet Care Connection can help you with your spring-cleaning.