First off, I'm a programmer and there have been many times when I have had to templatize something that higher-ups wanted populated with existing data; an email template targeted at their specific customer base perhaps. It's quite easy. Let me give you a quick run down.
A) Get the approved email (usually has John Doe in place of the customer).
B) Create a text template out of it and place variable holders where dynamic data is to reside (John Doe now becomes something like [firstName] [lastName] so when we cycle thru the customers we generate a personal email).
C) Snap in and run.
Well you get the gist. There is more work but that's the high level approach. Now one thing a good programmer must do is READ the template and adjust the data accordingly. What do I mean by this? Glad you asked!
Recently, I received an automated email from the company that issued me a Secure Sockets Layer (SSL) certificate for one of my sites. The template was good and the data populating the data was good but the programmer probably didn't bother to really read the email before putting in the data. Here's the line in question:
Your certificate is set to expire in approximately 29.96 days time, you can renew this by going to the following URL:
Now we can surmise that the Template looks something like this:
Your certificate is set to expire in approximately [daysToExpire] days time, you can renew this by going to the following URL:
And we know for a fact that they know EXACTLY when the license expires, 29.96 days.
Like I said, the template and the data are both good but now you may be able to see the flaw; 29.96 days is not an approximation, it's exact.
So the programmer or the quality assurance team (QA), if they exist, should've caught it. To solve it, all that would need to be done is to use a Round() function, which is basically built into almost every computer language out there. They syntax might be different but the outcome would be the same; 30 days, which is a good approximation of when my SSL certificate expires.