
Show HN: SpreadServe  – Cloud automation for Excel spreadsheets - osullivj
http://spreadserve.com/
======
osullivj
Hi, long time trading systems hacker and originator of SpreadServe [1] here
with some background: I was inspired to build it after finding myself in a
meeting in a London Investment Bank in 2014 hearing a manager say "the traders
have defined the accrual calcs in a spreadsheet, now we just need a couple of
C# devs for a few months to build a real server to do the calcs". I realised
I'd seen that pattern repeat time and again over the ten years I'd spent
working on London trading floors. By hacking together Excel Addins in C++
myself I'd enabled an options trader to build a program trading system in
Excel by plugging his pricing sheets into Liffe's ETO limit order books. I put
an exotics trader on Bloomberg by connecting his huge 30 tab sheet to my
etrading gateways, then gradually replaced the spreadsheet with C++ pricing
servers. My own XLL Addin was running on hundreds of trading desktops, and I'd
helped any number of traders lash together ad hoc pricing and risk
spreadsheets with XLLs connecting them to market data, prices and quotes [2].
The same cycle kept repeating: trader whips up spreadsheet, sheet becomes
business critical, trader tires of manual keying of data, hitting F9, and the
flakiness of huge Excel sheets and demands the dev team replace the sheet with
a scalable service. Then the dev team takes months to replicate the
spreadsheet functionality in a C++, C# or Java server, and the trader gets
frustrated by lengthy change cycles.

I realised that we can escape that frustrating cycle by building a server
runtime for spreadsheets. Just as node.js took JavaScript to the server side,
SpreadServe is "node.xls": an asynchronous scalable server side runtime for
Excel spreadsheets that supports XLLs, RTD & VBA as well as a REST API, RDBMS
integration and websockets subscribers. As Felienne says [3] "spreadsheets are
code". But that code is trapped in a desktop IDE for grid based visual
functional programming: Excel! And that's not the right environment for
reliable automated operation. So SpreadServe's aim is to separate the
development and rumtime environments for calc heavy spreadsheets: Excel for
rapid change cycles by tech savvy power users like traders, then SpreadServe
for production scalability, resilience and audit logging.

[1] [http://spreadserve.com](http://spreadserve.com)

[2]
[http://babbingtonslade.com/industries/](http://babbingtonslade.com/industries/)

[3] [https://etrading.wordpress.com/2015/08/13/spreadsheets-
are-c...](https://etrading.wordpress.com/2015/08/13/spreadsheets-are-code/)

~~~
macca321
I had a summer job in 1997 at a large Insurers (kill me), and people on my
team would spend at least half an hour a day waiting for networked, dependent
Excel files to calculate after opening them.

Since then, I have always suspected it was still a problem in large financial
institutions, although the few times I mentioned it to people they looked at
me blankly. Now I feel vindicated!

Out of interest, does the Financial Industry use any analogues to source
control and unit testing for spreadsheets?

~~~
fzumstein
I wrote a blog post about unit testing Excel workbooks using Python's built-in
unittest module: [https://www.zoomeranalytics.com/blog/unittests-for-
microsoft...](https://www.zoomeranalytics.com/blog/unittests-for-microsoft-
excel)

------
polskibus
I did several Excel to App implementation for the reasons you mention and
more.

I'd like to better understand the architecture of your proposal to consider it
for my future projects. Does it run real Excel instance under the hood? Or is
there a full emulation/interception going on?

Can you cope with several linked excel spreadsheets at the same time ? Can you
handle custom DLL loading/extending? Or perhaps, are you willing to share a
whitepaper/architectural outline?

~~~
osullivj
I'm using the Open Office Calc engine under the hood for Excel formula
emulation. I extend that with my own implementation of the Excel4 API's
xlcall32.dll, so that XLLs can invoke the Excel4 API. I also emulate Excel's
built in RTD client, so that XLLs that supply an RTD server can push real time
data into a sheet. Feel free to download the install kit [1], or email me on
ssbeta@spreadserve.com for more detailed discussion. Thanks for the interest!

[1]
[http://spreadserve.com/s3/downloads.html](http://spreadserve.com/s3/downloads.html)

------
magmasystems
Knowing John's work at various investment banks, I would venture to guess that
Spreadserve will be a top-notch product. Scaling Excel is something that has
been needed for a long time. How many times have we, in IT, gotten complaints
from traders and quants about Excel crashing with a large number of calcs?

------
wslh
How does it compare with HPC Services for Excel?
[https://msdn.microsoft.com/en-
us/library/ff877824(v=ws.10).a...](https://msdn.microsoft.com/en-
us/library/ff877824\(v=ws.10\).aspx)

~~~
osullivj
HPC requires you to refactor your spreadsheets to distribute the workload
across the nodes. XLL C++ code needs to be tweaked to make them
parallelizable. And the resulting ensemble still needs to be driven from a
desktop Excel. SpreadServe takes unmodified spreadsheets and runs them on a
server, completely automated and decoupled from any GUI.

------
sklarsa
Really nice work! As someone who has automated several spreadsheets by
essentially reimplementing them in a "proper" language like C# or Python for
several financial institutions, I see the immediate need for a product like
this across all business units. Not only does your product help save time and
resources, but your focus on proper testing can easily help reduce very costly
errors (which happen more often than one would like to think).

One question, how does your product integrate with 3rd party APIs like
Bloomberg or SNL?

~~~
osullivj
Thanks! SpreadServe has 3 APIs: REST/websockets, C++ and Python. A SpreadServe
deployment is a cluster of servers. So if you wanted to push Bloomberg market
data into a spreadsheet you'd code a new server component in C++ and/or Python
against the BBG API.

------
sipos
What is the licensing model? Completely open source, free for small time use
with license fees for heavier use, charge for all commercial use, undecided
yet?

I ask out of interest rather than because I am thinking of licensing it. I can
see it will be highly useful though to those that need it.

~~~
osullivj
Free for public instances of SpreadServe that phone home spreadsheet details
to spreadserve.com's live page [1]. Chargeable for offline instances that
don't phone home as they have a paid license key. Some of the codebase is OSS
[2]. More details on the license model here [3].

[1]
[http://spreadserve.com/cws/cdashboard.html](http://spreadserve.com/cws/cdashboard.html)

[2]
[https://github.com/SpreadServe/SSAddin](https://github.com/SpreadServe/SSAddin)

[3]
[http://spreadserve.readthedocs.io/en/latest/license.html](http://spreadserve.readthedocs.io/en/latest/license.html)

~~~
sipos
Thanks. Making the add-in open source makes sense from a business perspective,
lets people inspect the code they are running on their machine.

------
julienmarie
I worked and help launch something similar a couple years ago :
[http://calcfusion.com/](http://calcfusion.com/) .

------
chatmasta
This is really good.

What is your sales plan?

~~~
osullivj
Free public licensed [1] SpreadServe deploys phone home to publish spreadsheet
info on the spreadserve.com live page [2]. That's the way I aim to build
adoption. Offline license keys are chargeable, and stop SpreadServe phoning
home. Small hedge funds and asset mgrs are my first target market for paid
license keys. I'm not going after big banks early as the enterprise sales
cycle is so lengthy and torturous is can kill small vendors. I've seen that
first hand, so those customers are for much later.

[1]
[http://spreadserve.readthedocs.io/en/latest/license.html](http://spreadserve.readthedocs.io/en/latest/license.html)

[2]
[http://spreadserve.com/cws/cdashboard.html](http://spreadserve.com/cws/cdashboard.html)

