NetSuite – Feel the Love!

This month, I’m entering retirement. I’ve been writing software for over 4 decades and since 2017 it’s been almost exclusively spent customizing NetSuite. My time with NetSuite started out somewhat rocky. In fact my very first blog article was a scathing rebuke of the NetSuite platform and support. As I retire, I’d like to bookend with this. It is my pleasure to report good things about NetSuite.

I find NetSuite incredibly extensible. As a developer, you are free to write your own single page apps, meaning you can inject custom pages anywhere in NetSuite. I like writing “modules” comprised of a Suitelet (the page), an HTML file for any statically defined markup, a Restlet (AKA restful API), often times I include a module-specific library, and finally a client script. This offers a clear separation of concerns. You can create your own data tables, custom record types. You can add custom fields to existing records. You can form your own relationships (parent-child) between all types of records. The sky is the limit!

I really like the selection of JavaScript for both server side and client side code. Over the years, the platform has progressed through SuiteScript 1.0, 2.0 and most recently 2.1. SuiteScript 2.1 is JavaScript ES6, which makes it closely compatible with the latest browser supported JavaScript. Many platform-specific methods are available on the server side and client-side. A call to search.lookupFields() works in a Suitelet, Restlet, or Client Script. A JavaScript method like Array.sort() works in server or client code. Unlike other platforms, where a developer might be writing C# on the server side and JavaScript on the client side, NetSuite reduces complexity by standardizing on one language and one set of platform-specific methods.

There are many standard reports, but you also have the option of writing saved searches, which can be printed much like a report. Printed transactions, like Estimates, Sales Orders, Invoices, Pick Tickets, Purchase orders, etc. can be customized in 2 ways. You have the option of using a non-developer basic form. Or you can have someone like me customize an Advanced HTML/PDF Template, which is a combination of HTML and Freemarker templating language.

NetSuite offers developers the option of creating background tasks, like Schedule Scripts. If a Scheduled Script becomes too needy and is monopolizing server-side resources, there’s the option of breaking it up into multiples tasks via a Map/Reduce Script.

A developer can inject custom code into a standard form, like viewing or editing a sales order. This is done through User Event Scripts and custom fields. Its even possible to commandeer a section of a standard form, like editing a sales order and injecting a single page app into a section of that form. Basically the sky’s the limit!

I’ve rambled on enough. In summary: I love working with NetSuite and I love writing JavaScript. And, I wanted to give NetSuite some love now that I’ve worked with it for over 8 years. To NetSuite’s credit, they’ve come a long way in a positive direction regarding both platform and support. If you are not a NetSuite customer, it’s worth a look!

I’ll also end with this shameless plug. I am retiring, but I’d kind of like to keep working with NetSuite. If you need any part time help, or want advice on a project, feel free to contact me. I updated the About page with more info about me. Hit the Contact page or comment on this post if you want to get in touch with me. I’ll still be around.

Cheers,
–Kevin

NetSuite Reducing # of Tenants per Shared Host

I can’t tell you how good it was to see a notice pop up when logging into NetSuite telling me we were going to experience some down time. NetSuite was planning to reduce the number of tenants per shared host in an effort to decrease variability of response times. AWESOME! I’d been pestering them about this for several months.

In previous blog posts, I had drawn several conclusions:

  • NetSuite customers share a common host (this was a no-brainer)
  • NetSuite was NOT automatically rearranging tenants to find companies that fit nicely together on the same host.
  • Oracle was pouring money into NetSuite to solve the problem of poor or erratic performance.
  • NetSuite/Oracle was working hard to make it easier to migrate tenants to either a new host or a new data center (and new database architecture)

Here’s what NetSuite/Oracle is fixing. In a multi-tenant environment, different companies all run transactions concurrently. It looks something like this, where each company/customer has transactions arriving at various intervals.

If every transaction arrived at the shared host when it was completely idle, response time would be whatever time it took for the server and database to complete that transaction. But if the shared host is busy when a transaction arrives (and the shared host can’t get to it), it waits for its turn to execute.

The trick is finding the right mix of tenants, possibly companies in different time zones (separated by more than a few hours), to share a host. However, the next problem is the idea of regional data centers. Is it practical to have a company in Ireland sharing a host with a company in California? This would be a great mix. But will the company in Ireland be happy having their NetSuite provision hosted somewhere in the US, or vice versa? Probably not.

So the trick is finding good matches as shared tenants. It appears NetSuite is evaluating this problem and making some strategic Chess moves. I received this notice recently when I logged in.

If you read some of my other blog posts, you’ll see how I was able to diagnose that at least two-thirds of my transactions ran reasonably quickly. One-third didn’t. When I dissected the response times of the poor performers, it was elongated server time (not workflows, and not SuiteScripts) that was causing the problem. It was my conclusion that it was wait times caused by a busy host that was the problem.

So this notice of downtime was truly a sight for sore eyes! I’ve said this before, but it’s worth repeating… Thank you, Mark Hurd (President of Oracle). It appears you are spending your money wisely.