Might be related
Migrating off Netsuite - The hidden cost of Clouds..
Published 2012-04-28 00:00:00
One of the more interesting projects I have ongoing is a migration and deployment of an ERP system. For a bit of background, our customer was persuaded about 3-4 years ago that moving their accounting and Stock management into Netsuite would be a good idea.
For those who have not heard of Netsuite, it's a Cloud based ERP system, that from my understanding runs on an oracle backend and is totally web based. All the users log into the website, enter the various stock activity ( Purchase Orders, Item Receipt, Bills, Sales orders, Invoices, Item Fulfilments and Various Credit Memos), along with the standard accounting features like Journal entries. etc.... The system keeps track of your stock and should give you a value of stock on hand, along with doing your audit-able reports.
Well, I'm guessing anyone who has worked with ERP systems, probably knows that the devil is in the details for this. The company I have been working with have been using this for over 2 years now, and are beginning to see the ugly side of cloud based system (which is why we are trying to migrate off of it.), Let's have a look through the issues.
First off, Netsuite is not that cheap, It's comparible to buying and installing a standard basic ERP system. This is especially true when you look at software like Xtuple, that we are targeting as it's replacement. The annual cost to use Netsuite is about the same as the set-up and some serious customization work for Xtuple. However the real cost savings come from the fact that the current Netsuite costs are capped by limiting the number of users and features that are required. This results in absurd situations where the company choses to save money by having users share logins resulting in users getting kicked off while entering a large amount of data, just because another users logged in under that account.
What is worse is that the hidden costs of using Netsuite, as I go into below mean it could very well be a black hole that rips profits from the company using it..
The selling point of Netsuite is the whole idea that your management accounts are up to date, and you get these really cute graphs in the browser and on you phone showing the state of your business. It's sure a good selling point, however the reality is far from this. Fundamentally all data driven systems rely on a simple fact 'crap in, crap out'. Basically if you put crap data into the system then you get crap information out of it.
Nobody obviously wants to put in crap data into a system. However this is the real world, and we all employ staff who on a bad day make mistakes. Some times a few, and sometimes alot, either by not understanding their task or just by accident. Normally company procedures would be in place to verify, check and make sure that the data is correct. In an ideal system, this verification process would be flexible, as you can never predict what kind of accidental data would be put in.
Unfortunately Netsuite has only very limited verification processes, you can run reports, download them and sift through them. It's got a really powerful, but ultimately confusing as hell report generator. That may as well be written for Martians for all the use it is. They do offer SQL access, however guess what ... $$$ yes, you have to pay a considerable extra amount for that. So the only real way to access 'your data', to verify mistakes are not happening is to pay extra... (that does not include the extra cost of someone using that SQL access to analyse the data, or use it to quickly pinpoint issues.)
ERP systems are not really that complicated. We have been working with Xtuple for a few months now, and I can say that I know about 80% of the design of the top of my head. I can real off what happens when you post an invoice, what tables are affected, and why it is done that way. It's actually quite simple (although I have to admit to not knowing what all of the 1000+ stored procedures are for..)
Once the new system is online (which is running late unfortunately.. see below..), if there is an issue, I estimate support times are likely to be in minutes for most issues, as we can very quickly access and review the data and activity that occurred before anything strange happened. With Netsuite, it's the classic multi layer support, first line is supposed to analyse the problem (determine if it's a standard issue), or upgrade it to the next level etc..
What really seems to happen is that In-country sales team are not skilled enough to deal with issues, the first level support frequently respond with not very helpful responses, and fail to realize when to escalate issues. Are often on the wrong time zone.. do not correctly asses the skill level and knowledge of the reporter, do not have any access to detail access or replay logs and generally take so long to resolve the most trivial issues, that frequently the user can not even recall the exact details of the original issue...
The basic Netsuite system comes with a default 'download' backup of your data, this is hidden away in the menu system, and takes a while to generate. it allows you to download a file containing 'your' data. The absurd fact is that this download is absolutely pointless. It is not documented, does not contain anything close to all your data, and may as well be a flash movie with a dancing cat saying 'ha ha gotcha...'
As we decided quite some time ago that backing up the data to do analysis and eventually possibly migrating may be a good idea we have been working on a method to extract the data from Netsuite for a while. The basic premise is to use the SOAP interface to dump either the whole data, or a chunk of it nightly into a duplicate database. In our case we used the PHP SOAP API kit they provide, and a MySQL database. Writing the code to interpret their SOAP XML Response was not pretty, and would have been considerably easier if they had decided to use something like JSON.
The SOAP interface is extremely poorly documented. There is depth and detail in the documentation, but in pretty much every example of when I've needed to use them, the result has been that though sheer guess work I concluded what and how to do a task, rather than making any real use of their documents.
The biggest issue we have though with the data we get out of SOAP is that it's not very clean. We have frequent issues with voided or deleted records coming down the line in the SOAP interface. In our daily backup, we are basically searching all transactions that have been changed during a particular day. Unfortunately it appears that if the users have voided and deleted a transaction (eg. an invoice), rather than coming through as 'deleted' it is just ignored and not reported as updated.
Worse still, completed dumps of all transactions still return invoices or other transactions that have been deleted or are unavailable when you try and use the web interface.
So we are nearing the last stages of our data migration and we are using the various summary data available in Netsuite to determine if our migrated data matches the records held in Netsuite (eg. Stock balances, Account Balances, AP balances etc..) This is a slow laborious process in part due to the manual finding of data errors in Netsuite from voided invoices, but also we discover other strange occurrences.
Negative stock levels
In an ideal world, you could never have a negative stock number, you would never be able to ship a set of cuddly toys to a shop from the warehouse where you have minus 4 stock on hand. However welcome to the real world, If the staff entering the stock numbers for receiving stock is on holiday for a week, the sales staff phone the warehouse find out that they have some physical stock really there when the customer asks for it. and hey presto you get a negative stock number in the system for a while. Until someone goes back and enters the Item Receipts..
This results in a number of issues for ERP systems, including how to deal with stock valuations for management reports. But what we found also is even more worrying. as it makes an absolute mess of stock tracking.
Basically we found one situation where a Sales order, Invoice and Fulfilment was done on a product that had zero stock. After the sales order was done, they first prepared a Fulfilment, this did a stock transaction in Netsuite, removing one item (resulting in a negative stock level), this is actually the correct behaviour. Then they went and created an invoice, which in most normal situations does not cause any stock transaction effects. In Xtuple, an Invoice can cause a stock movement, however you have to manually specify that should happen. In Netsuite it appears that when the stock level fell below zero that the invoice on this sales order also made a stock transfer. resulting in the system thinking that 2 items had been delivered to the shop. this not only messes up the AR but also any analysis that might be done on this.. - And will result in some messy tweaking on our target data.
What was worse is that there was no way to determine from the data in Netsuite if that invoice had caused a stock transaction. Nothing in the data indicated that it had happened.
While I would not recommend Netsuite to anyone, it is probably an acceptable tool for a very simple business operation. It is poorly suited to a growing business, partly due to it's lack of flexibility without ramping up your expenditure. Your best bet is to consult with real experts on Open source products like Xtuple, who can provide you with a 'Sales free' assessment of how suitable and what might be required to implement a more flexible solution for you business. While it might cost more for the first few years, as you customize it to your needs, it will defiantly save you hugely in the long run.
- PHP just does some things better. cloud backups, pecl-expect
- Roo J Solutions Growing into 2013, always recruiting, and developing differently
- Interesting Problems.
- Prettybooked.com turning a startup into a reality.
- Migrating off Netsuite - The hidden cost of Clouds..
- Roo.XComponent introduction
- Roo J Solutions Limited is recruiting