How do you handle these situations:
User: I got this weird result. What happened?
Programmer/Consultant / IT expert: I can't tell after the fact what happened back then. Unless you can give me a way to reproduce the weird behavior of the software I can do nothing.
User: No, either tell me what I did wrong or what I must do differently, or else I assume I am doing my job right, and therefore the system is wrong and must be fixecd.
Programmer / Consultant / IT person: no, my job is to fix reproducible errors.
But what happens when you simply got wrong results, but it is not a reproducible problem nor an identifiable user error? Whose responsibiliy it is and who and how fixes it?
E.g. we have a case when a foreign currency purchase invoice has the vendor, VAT etc. booked correctly i.e. at say $100 converted to €72, but the inventory value is booked as €100 and the difference somehow became an indirect cost. Not a reproducible program error, not an identifyable user error!
At least half of the support requests I deal with is "tell me what happened". Which is very often not possible.
0
Comments
It turned out the function I called to set initial values lost its settings when run normally without the debugger running.
In your cases, one way of approaching it is to determine what can go wrong to cause the bad result.
http://mibuso.com/blogs/davidmachanick/
That's because you're not trying hard enough.
There is always a proper reply to the end users to explain what happened.
AP Commerce, Inc. = where I work
Getting Started with Dynamics NAV 2013 Application Development = my book
Implementing Microsoft Dynamics NAV - 3rd Edition = my 2nd book
Often it came out they were setting some parameters in a wrong way, one time was a process bug.
Remember to ask EVERY single data they insert and, to be sure, the order: in an occasion, with a hardly customized sales line table, behavior was different switching the order of filling two fields with the same value.
Just my 2 cents.
Nav, T-SQL.
I know that some issues are very hard to find and sometimes it's not possible to proof users wrong when they assert that they did (or did not) do something. But in the end you'll find an explanation or at least an idea of what happened. Sometimes the user won't trust you when you have just an idea, that's true. But I think it's not worth it to chase issues for ever or discuss it with unreasonable users when the issue is not repeatable and the system works as expected when you do it again.
Processing external wev orders:
Wrong code, which caused double sales orders usually once or twice per month: Correct code, which caused error on testfield once and then some functionality has been rewritten.
Unposting functionality - deleting item ledger entries, application entries and recalculation remaining quantity. Missed locktable (!!!) caused incorrect remaining quantity and open sign once or twice per quarter.
Nav, T-SQL.
Nav, T-SQL.
Semi-OT: is there any best practise or tool to conduct these types of tests?
When this kind of error happens, i usually make this steps:
1. Make sure that the record has not been changed since the error occurs.
2. Get a timestamp of the record as a bigint using following SQL code (replace company_name, table_name, prlmary_key with correct value): 3. Get a nearest timestamp from log tables (cnange log entry, customized log entries).
4. Compare users activity by using log tables.
5. Revise the code.
Nav, T-SQL.
About 3 and 5, could you explain or give an example of this? It's very interesting topic I think
General recommendations:
1. Identify a user who modified the record. Usually he has a least offset from original timestamp in change log entry.
2. Find a least offset with another user id. Probably he competed for the record with first user.
3. Analyse activity of both users - what other records were logged, ask users and try to find incorrect piece of code.
Nav, T-SQL.
ok, so you are talking about the NAV log entry.. I was thinking the SQL Log as this is always active.
The Log in NAV is not always on but when you have lock/support problems and then setting this to on this will work of course. Thx.
:thumbsup:
However, the standard, which is largely a huge jumble of overly complicated stuff for purposes that could be solved much easier, and there is no documentation ever explaining you what each piece of code meant to achieve, and if you look into the next version you see that codeunit completely rewritten because it was probably buggy as hell, I think there are untrackable situations. I have found them e.g. as orphaned reservations entries, purchase prepayments that were deducted in a wrong way, completely crazy results out of inventory adjustment, over-the-top indirect costs and so on. I don't think it is possible to track them down if they are not reproducible because it involves understanding the purpose of large chunks of code that don't make a lot of sense and when you look into the next version and see they are completely rewritten then yeah, never meant a lot of sense to begin with.
I don't mean this in any disrespectful way, because I've given up on plenty of bug-hunts, but it really feels like a cop-out to just say "I can't explain this because it is crap code". I usually explain it as "I could spend more time on trying to figure this out, do you want me to continue?" and then it's the customer's choice to spend more money to keep digging.
RIS Plus, LLC
Sure, as if anyone would be actually willing to pay for it. Wait, what?
Seriously DenSter somehow you and me and some other folks around here sound like working on an entirely different planet than me - customers who seriously accept the time based billing concept in everything. I mean even I wouldn't in private life, so I don't expect anyone else to do it - I take only fixed quotes from my car mechanic, not estimates because I have all the power as a customer and they have zero, because it is 99% a buyers market: so I can force them to take all the inherent risks of estimation. And I know, working at an end user site, that I could never sell any project to my boss if it was not 200% fixed price and with warranty. This is my planet. On yours customers just accept anything getting billed even if you see it as you selling them an imperfect software that does unexpected things. Astonishing. (Even now working internally and thus with more trust than external consultants, I still get the mood that anything unexpected happens is somehow my fault.) Is your planet such a sellers market? If yes, how comes you guys are forced to have infinite amounts of patience and dedicated?
In the meantime, I somehow live on an entirely different planet - such as I am currently migrating a customization by a Danish!!! partner with a fairly good sounding name that has so low standards that it has chunks of Danish texts hardcoded right in the middle of the code. And only gets worse from here. On my planet my level of dedication to quality is exceptional - I don't think I have ever tried to bill for work that did actually not solve a problem - and yet your standards come accross as infinitely high to me.
I live on a planet with suspicious clients and almost everybody doing worse work than me. Somehow your planet, yours and some others folks' planet around here just does not work the same way as mine, it is about infinitely flexible clients and infinitely high quality consultants.
I mean I kind of know this sort of your planet exists - it is the planet of seriously big business. Like, banks. Insurance companies. The kind of businesses that don't even have a single owner who decides everything, they usually have shareholders. You know places that have actual processes, not just the whims of the owner. These kind of really corporatey places that have stuff like actual HR and similar corporatey stuff. The only thing I don't quite understand is what does NAV even do in that kind of world? I mean that is typically SAP turf.
We write an add-on for a CRONUS database because we have to have some sort of baseline. You want a fixed price to implement that add-on in your customized database, essentially a different baseline. In fact, a baseline we have never seen before. You want a warranty, but will continue to do your own development to the database that may cause instabilities with the add-on. We have no control over this. And you want a fixed price for support, even though you have changed the software after it was implemented. On what planet could a company come up with an accurate fixed price estimate for this? And when they can't why would they ever risk coming in too low?
That sounds like you would want to bill on time spent, the opposite of a fixed price. If the problem is solved in 1/4 of the time you are still paying for the other 3/4, regardless if work is being done.
Your mechanic example is the perfect counter to your argument oddly enough. In the US mechanics do typically have a fixed price for every little thing they do. It's an industry standard. But they are so efficient that they always come in under the specified amount of time. You just end up paying more money than time and expense would have cost you.
As for some of your smaller points, I'm afraid they are not unique.
There's bad development everywhere, and that doesn't mean just code. Have a read of The Design of Everyday Things by Donald Norman. And every company blames something or someone else, technology is just the easiest target because fewer people understand it. It's part of every job and every aspect of life.
If you ask me it is your standards that come off infinitely high, but the point I always try to make in these lengthy posts is that it's all about perspective. End User perspective vs. VAR / Partner perspective. Mine vs. Yours. Small company vs. Big Company. Perspectives based on our parts of the world, experience levels, training, position, and on and on. And to me that's the whole point of these posts and the community at large: understanding each other and using those perspectives to improve ourselves.
RIS Plus, LLC