SimplySocial is a unique approach to social media marketing. We are a software as a service that provides an easy, step by step strategy on how to be successful with social media. Our product is based on a series of simple questions that first asks you some details about your organization, and then helps in creating content (and scheduling it at the right time). Its purpose is to be helpful and provide tips and instructions along the way. Compare that to Facebook’s “Write something…” when you go to your brand’s Page…
To build this tool, we started development in October 2011 with two developers. We have roughly 60,000 lines of code currently written and about 3,500 hours of development logged within the last 8 months.
In terms of tech, we have two big sides: the client-facing side and the heavy-lifting side. The former is powered by Drupal 7 over the LAMP stack. The latter is powered mainly by Python 2, but also by Drupal-aware PHP CLI scripts. There’s a certain overlap between the two, managed using Supervisord, Beanstalkd and CouchBase. While the Drupal part might be easier to understand, I’ll get into more details about the heavy-lifting side.
There are many operations triggered by the actions of our clients (such as answering a question of ours within the interface or replying to a comment from a Facebook thread) or by external events (e.g. new Twitter mentions came up, new Google Alerts have been received etc.). These events shouldn’t impact performance or normal operations that a client goes through. Thus, there’s a number of queues (managed by Beanstalkd) with different kinds of jobs to be handled. These jobs are handled by the so-called workers, implemented either in Python (most of them are) or in PHP. All of this happens in the command line. These workers are kept up and running using Supervisord, which has both a nice graphical web interface for starting/stopping/inspecting workers, as well as makes sure to restart them if they die. These workers are meant to run continuously and wait for a job to come up in their queue.
One approach we’ve tried to follow with this project was defensive programming. Since we integrate with Facebook/Twitter/YouTube/LinkedIn and even more services, as well as with the network, unforeseen errors might come up. We’re leveraging Python’s powerful try/except and PHP’s somewhat poweful try/catch to get all errors, log them, and then “bury” the job being executed. The script then continues to execute the next job. This is powerful because we can go and inspect buried jobs separately and see what went wrong, after which we can fix the scripts with more checks or add more flexibility if needed. This way, no data is ever lost. The only problem is that a great number of buried jobs can pile up and make it hard to clear up (think hundreds of thousands). Queue system wise, Beanstalkd is simple, fast and … simple. If our needs increase, we might give Celery a try in the future, as it looks really promising, but probably has more overhead and consumes more resources.
Regarding CouchBase, it is somewhat of a hybrid between Memcached, Membase and CouchDb. It is essentially a NoSQL server which supports replication and document-based storage (long story short). We’re using it to store everything in between. We’re throwing anything a script needs to store in between jobs or persist for a while, as Beanstalkd storage is weak and we don’t want to bloat job descriptions with bigger data. Since we’re receiving data organized in all sorts of ways from different social networks and other services, it’s easy to just pack it as JSON and store it in CouchBase. Later, it is denormalized and stored within Drupal for client-facing features, but it’s not mandatory that all CouchBase data reaches MySQL. Scripts can do fast processing using this “in-memory with persistence” database system and then just store the result for the client. Other specialized database kinds such as Graph-based databases might be used in the future.
We’ve decided to base our software development operations in Romania since I’m the technical co-founder, and my network is located here. We also found out that development costs and costs of living are significantly lower than in the USA and The Netherlands, which can be used as a competitive business advantage.
We do have two job openings posted online, but we are not looking for anyone very specialized. We are looking for generalists until our technology stack and our features crystalize. The first job postings seems to have scared some people away by having higher requirements. As a result, we posted an amended version with fewer requirements. Unfortunately, we’ve received a lot of irrelevant applications, and from the few relevant applicants that we interviewed so far, we were disappointed about their level of basic programming knowledge. We turned back to my personal network to find someone relevant and knowledgeable, who could pass our basic interview. This does generate a few concerns about how easy it will be for us to hire talented people in Timisoara, but we hope that creating awareness about the brand will help.
To conclude, remember that SimplySocial is the highly leveraged software as a service that does the work for you. It guides you through what becomes your own, individually crafted, social media strategy and helps you create content and respond to your audience, while also giving you a good idea about how well you are doing and where you should be putting in more effort. At SimplySocial, we believe that you should not need 40 or so different tools and services to have a good social media presence, but rather you should just have one that does everything for you. We want you to be minding your own business and then use our service to tell the world about it.