I have just come out the other end of one of those support nightmares, and I thought it might be informative to describe a support call from the other side for those of you who have wound up waiting and waiting for assistance. A customer who has bought some licenses in the past and recently purchased a few more asked for help because an application which worked in R5 under Midas 2.5x had a problem when they tried it with Midas 3.20a, but they needed a 3.x license because they were upgrading to Notes 6.5x. Almost everything worked, but some bullets were not lined up properly, with each bullet indented further.
After trying to diagnose the problem over the phone, it became clear that it was going to be a bit more complicated, so I asked for a sample db, as it is almost always more likely you will get a solution if you can reproduce the problem. The customer agreed and sent a sample db. So far, so good, and better than lots of support calls.
Now, things have been busy, so it took a day or so to look at the database, and when I did, I was taken aback. Most customers either use Midas for a fairly discreet task, or have one small script library which uses Midas, or if they have done a lot more, they don't show it to me. This, on the other hand, was a very cool, very complex application with multiple nested script libraries and classes using Midas in all kinds of exciting ways.
I was happy. Big mistake. When you think like a developer or a salesperson, cool, complex solutions are a treat. When you think like a support person, they are a nightmare.
Anyway, I was able to reproduce the problem, but I had a heck of a time following the logic and tracking down where the problem occurred. It sounds fine to "use the debugger", but it is a lot harder when you are dealing with thousands of lines of code and lots of intermediary steps and two debuggers (the LotusScript debugger as well as the C++ debugger for when Midas is used), and all the code looked fine.
I told the client it would take a bit longer. The client was very patient about this (one advantage of not charging for support is that people are a bit more patient about waiting), but told me when their deadline was. A week out, it hardly seemed a problem at all. Another big mistake.
This proved to be a terribly intractable problem. At first, it seemed a case of a developer taking advantage of a bug in Midas 2.x which was fixed in 3.x, but that proved to be wrong. Then it seemed to be a bug when with the AppendRTItem method when copying onto a stored form, but that also proved to be wrong. Along the way, there were many other distractions, along with the inevitable issues because it turned out that the developer had made some changes between the 2.x and 3.x versions ("no, we didn't change anything, I promise"). On and on, whenever I had a spare couple of hours, such as those between 1 and 3 am.
Finally, I had it narrowed down to a problem shifting paragraph margins. There is a bug when the logic is called on paragraphs that have just been copied and already had the paragraph attributes changed. Trust me, you don't want to know more. So here it is, the end of the week and the day of the deadline, and I finally came up with a workaround which allowed them to use the production version, as it was way too late for them to use an interim version with all the testing that would entail.
The workaround was laughably simple. Look at the before and after (revised slightly to protect the innocent), and tell me what you would think of the support person who spent a week and then told you to make this change:
Original code
Public Sub ShiftLeftMargin(rt As MidasRT, adjust)
Dim para As GeniiRTChunk
If adjust = 0 Then Exit Sub
Set para = rt.DefineChunk("Paragraph 1")
Do While para.Exists
Call para.ChangeParagraph("ShiftLeftOffset=" + Cstr(adjust))
Call para.GetNextTarget
Loop
Revised code
Public Sub ShiftLeftMargin(rt As MidasRT, adjust)
Dim para As GeniiRTChunk
If adjust = 0 Then Exit Sub
Set para = rt.DefineChunk("Paragraph 1")
Call para.GetLastTarget
Do While para.Exists
Call para.ChangeParagraph("ShiftLeftOffset=" + Cstr(adjust))
Call para.GetPreviousTarget
Loop
Rich Text Comparison using Midas
Public Sub ShiftLeftMargin(rt As MidasRT, adjust)
Dim para As GeniiRTChunk
If adjust = 0 Then Exit Sub
Set para = rt.DefineChunk("Paragraph 1")
Call para.GetLastTarget
Do While para.Exists
Call para.ChangeParagraph("ShiftLeftOffset=" + Cstr(adjust))
Call para.GetNextTargetGetPreviousTarget
Loop
Customer's likely conclusion
Clearly, I got a totally incompetent support person
My conclusion
Clearly, I have to learn to limit these support calls
My son's conclusion
Clearly, it is time for Dad to start charging for supportCopyright © 2003 Genii Software Ltd.