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.


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.


Daily Scrum (2014-03-29)

What did I do last time?

I did some work on the Amortized Loan Engine to work properly while respecting more of the various settings for a loan.  I set up a Loan Manager dialog (name will probably change) that shows all the transactions on a loan as generated by the loan engine.  It’s a special form that shows transactions on the various accounts Moneylender will now be managing on each loan: Overall balance, Interest balance, Principal balance, Escrow balance, Fee balance, Amount Due balance, and Interest Bearing balance.  In MLP3 you can see every transaction that affects each of these balances.  Aside from Escrow transactions, which work more like a separate account that’s associated with the loan’s account, all the transactions eventually end up on the Overall balance transaction list.

Here’s a screenshot of this very roughly implemented form:

I also wrote a few things into the MLP3 support Wiki detailing behaviors as I coded those behaviors into the software.  And I wrote a standalone program for my own use that lets me open .mlp3 files and shows me the structure and records it contains.  It’s like a portfolio viewer program.  It also helps me verify the file isn’t corrupt and see what records are present independently of Moneylender, so I can tell more easily what the problem is if something is going wrong.

What do I hope to do today?

Yesterday I was watching our son most of the day and didn’t get to do too much more focused work.  My wife graciously offered to wrangle our son solo today so I could do some work this morning.
I’m going through the loan wizard today and updating the look and settings on each dialog, ensuring those settings get respected in the underlying calculations.  Hopefully I can have the amortized engine working robustly.  MLP2 has a TON of capabilities.  The structure underneath the loan calculator needed a reworking, but it still has a lot of features packed in.  I have my work cut out for me!


None.  I did all the other stuff yesterday, so I’m home free today!


Daily Scrum (2014-03-21)

What did I do last time?

Set up an arrangement that will eventually enable me to hire on more staff from a more business-friendly location.

What do I hope to do today?

Back on MLP3 after a long break!!!  Because Moneylender Professional 3’s loan calculation system is drastically different from the one in Moneylender 2, there will be some major changes to how you can view your loans.  The biggest change is a view into the calculations that works similarly to running a Complete Accounting Report in Moneylender 2, but it’s easily accessed from the list of loans.

Today I hope to write a basic version of that view so I can continue to develop and debug the new loan calculator’s various flavors (fixed term, flexible, variable payment, variable schedule, etc.) and test the calculations for accuracy.


I don’t have any outstanding side work (that I remember) and just one meeting at 11:30 today which hopefully won’t take long.


Daily Scrum (2014-02-28)

What did I do last time?

I wrapped up a major paperwork task.  Phew! 

What do I hope to do today?

We’ll be moving to New York State, the Rochester area, in a couple months and once we get settled in I’ll be adding at least one person to the team.  Additionally, the new corporation I’ll be working under (which will absorb TrailsWeb’s operations) will be paying me a regular salary, so I need to put together at least a rudimentary accounting and payroll solution for that.  This will likely be a precursor to the accounting package I hope to release in parallel with Moneylender.

Roadblocks to getting the job done?

I have a couple people with questions about Moneylender that require more in-depth technical support but they shouldn’t have too much of an impact.

When I get to NY and hire another person, there should be a nice uptick in productivity across the board, including having Monday through Friday telephone support.  It’s been a long road, but we’re finally going to be able to make some big steps forward in the near future.


Daily Scrum (2014-02-14)

What did I do last time?

I've been filing a lot of paperwork and ironing out a bunch of details.  In a couple months we’ll be offering phone support during regular business hours Monday through Friday, and we’ll probably be able to add some talent to the team so development can progress much faster.

What do I plan to do today?

Happy Valentine's Day!  I’m going to be working on more paperwork today.  This weekend I should be getting much of the work buttoned up and out of the way so I can get back to writing MLP3 into existence.


There are a few jobs I need to take care of that might take three or four hours.


Daily Scrum 2014-01-31

What did I do last time?

I’m doing a restructure and relocation of my businesses.  Don’t worry, all it means is that I’m moving to a different state and I’m doing all the paperwork to be a legal business entity there.  So last week I worked on filing various forms, buying insurance, and preparing some other business documents.

What do I plan to do this week?

Unfortunately, this paperwork is essential to keeping the doors open so it has my full attention today.  I won’t be making any progress on Moneylender Professional 3.0 unless I somehow manage to do two weeks of paperwork in one day.  I will certainly be available for phone calls and emails all day, however.

Roadblocks to today’s goal?

Hopefully none.  If all goes very well, I should be back into developing MLP3 in a couple weeks.  I still have to do my 2013 tax returns so that’s going to take a day or two in the upcoming weeks, also.


Daily Scrum (2014-01-17)

What did I do last time?

It’s been a while since I posted the Daily Scrum.  Mercifully, it’s largely because I was on vacation during the holidays.  I did also have several other smaller projects to do, and the release of MLP 2.0.1beta.

So in the last month or so at lot happened.  MLP 2.0.1 beta made it onto the internet.  I wrote a few updates to the beta already and released those.  Lots of customer service emailing and phone calls as people roll into the new year and try out the beta.

What do I hope to do today?

I published MLP this morning, and I have two websites to edit today.  I have some paperwork to take care of also.  And I’ll be watching my son for about an hour and a half.  I hope that by the end of the day I’m going to have everything wrapped up and maybe put a little time into MLP3’s new loan calculation system.


Time is always a critically limited resource.