I currently own two businesses with a partner in each. Each business has a core responsibility it focuses on, and as such, my partner and I focus on each core responsibility, given our core competencies. For my partner, he focuses on our Merchant Services company. For me, I focus on our software firm.
Before I go into the details, a little background…
We started both businesses on or abotu 2012, with the goal of tying merchant services along with technology into a single cohesive deliverable. My role in this was developing a point-of-sale system to allow a lead-in to the merchant services, building a residual stream within both businesses along the way. After 4 years of attempts, we ultimately failed at delivering the point of sale (for reasons that should not be made public). During this initial four years, we were looking for a great CRM solution, that used .net as its platform of choice, and the available offerings were quite slim, sans SplendidCRM, which is a near-clone of SugarCRM, but in C#/.net. So, we paid the $5,000 and deployed it within our infrastructure. It’s served us well, but the user interface is lacking, and the usability of the system overal is antiquated.
Five years ago, as part of the history with what this new project will be, we developed a gift card solution for my partner’s existing client base. As part of that development effort, we also developed a customized provisioning system for that, and the rest of our planned applications we would develop and sell in a SaaS model. The key decision with this system was to use push mechanisms, along with Json APIs between the provisioning system and each of the dependent applications.
Five years later, and a lot of reflection, this proved to be inherently flawed, although it continues to work today. Some of the found flaws are:
- A push mechanism for changes REQUIRES both our provisioning system AND our dependent service to be active and functioning properly
- Disabling client accounts on dependent systems does not work reliably.
- Making changes to client systems for supporting non-standard capabilities of the client system is downright unable to be done, as we need a consistent data stream for all systems.
- Orchestration of this provisioning client for each dependent service REQUIRES a new application that needs to be deployed.
So, with that much reflection in leiu, a few months ago, on a whim, I searched once more for “open source crm solutions in .net”, and I came across a little project called OnlyOFFICE. Reading into it, I found it to be a beautiful CRM solution from it’s feature list, and it has the capabilities to also be an eamil server, should you wish to go that far. Here’s what the system says it can do:
- Cross platform solution: Linux, Windows
- Document management
- Integration with Google Drive, Box, Dropbox, OneDrive, OwnCloud
- File sharing
- Document embedding
- Access rights management
- Customizable CRM
- Web-to-lead form
- Invoicing system
- Project Management
- Gantt Chart
- Milestones, task dependencies and subtasks
- Time tracking
- Automated reports
- Blogs, forums, polls, wiki
- Calendar
- Email Aggregator
- People module (employee database)
- Instant Messenger
- Support of more than 20 languages
Reading over this list, and going through my reflections, I found a lot of parity. Woot! I immediately downloaded their latest installer, setup a VM, and subsequently installed it to give it a go to see what the capabilities really are. The whole setup took < 20 min, and I had logged in and began poking around.
The first thing I found was a feature that is not documented above, twilio integration for web-based phone calls. This relieves us from needing a dedicated SIP-based PBX, which is a +1 on my list for items that I need to manage on a day-to-day basis. Ok, at this point, I had gotten ahead of myself, so I took a breath and kept going. Going into the system further, I found a few notable things that piqued my interest.
- The Document Management is neat, as you have an ability to edit Word, Excel, and PowerPoint documents right in the browser (think google docs or office 365, but without either of those two services within the portal). This is a +1, as I am contemplating getting off of Windows in favor of Linux, and I’d rather still have something close to a windows experience for editing documents, until I can become stronger in LibreOffice or something similar.
- Project Management is something that I had not considered, and may become useful in the future, we can disable that for now, but neat-o.
- Email Aggregation will give me capabilities to connect emails to me into public posts against accounts, cases, etc.
- The blogs, forums, polls, wiki will enable a customer portal - and I may also be able to enable downloads from our firm within this portal.
- The system has a deeper ACL than what I had expected, as their is a rather fine-grained capability for a group / role / user based ACL within the portal.
So with my piqued interest, I began poking around the CRM module, and found the experience quite pleasing for use as compared to what we currently have with SplendidCRM. What this system does not have would be the features we built into our own provisioning tools:
- Subscription provisioning per-service we offer
- IdP support
Ok, so this has been churning over the past 6-8 weeks now, from discovering this product until writing this post. Considering our infrastructure is moving from deploying web applications into Application Services within Azure, to moving everything into containers and deploying with kubernetes clusters, it’s coming to light that we may have a good point to invest a little time in re-developing how we provision subscriptions within each of our offered services.
The scope of the work will be something to the affect of:
- Enable password reset from within the portal for a user (not sure why OnlyOFFICE did not do this.)
- Enable OpenID Connect logins into the portal.
- Factor-out all login capabilites of the open-source system.
- Add custom screens to enable subscriptions on services we offer
- Add custom screens to access all subscriptions we offer across accounts
- Create an API for publishing the provisioning changes, user management changes, etc. that our SaaS services will depend on so they can pull those changes in and project them as they need to within the context of each service.
- Create an API for dependent services to push group / role / permission setting changes into the central system, and then allow the dependent service to pull the stream of those changes from the publishing API for use within itself.
- [Bonus Points] Possibly refactor this system to use Postgres instead of MySQL, although both are now managed services offered within Azure.
I’ll be performing this work on a forked copy of OnlyOFFICE Community Server, and hosting it on GitHub under our company account, should you have interest in following along, or wish to use a similar technology in your SaaS business.
Looking forward to writing up theory on each of the above steps as I progress, and hope that someone will find this useful along the way.
Until next time…