Trial, free, paid SaaS users handling

We decided to show how we handle user registrations in Nerrvana. We hope that our chart will help you cope with this task much faster for your web service. In our system, the new user gets unlimited access to the system for 30 days. During trial period, a user can delete his account or become a paid user. If a user has not decided during trial – we either delete his account (if a user has not even launched our demo tests) or change account type from trial to a free one, which is limited in functionality. If you are wondering how we change Pricing page as per diagram, you can register in Nerrvana and check it out ;)

(Click for larger image)


UserVoice and StackExchange inside phpBB

In one of our posts from “Own web analytics for startups” series, we mentioned that we are going to implement Questions & Answers, and Ideas/Feedback functionality inside an open source forum – phpBB.

It’s time to share the recipe. I must say that in the end we decided not use this solution for a number of reasons, but perhaps someone will find it useful.

I will start with the Questions/Answers functionality (StackExchange analog). It was quite easy to implement it in phpBB. We took the mod Topic Solved version 1.4.4 as a basis. It used the same images to mark the post as an answer and the whole topic as answered. The topic is a question in this case. This is how answered question looks like in forum view:

Read the rest of this entry »

Amicus SendGrid, sed magis amica veritas

In total control

As Igor mentioned in the previous post, we have recently started working with the team of a popular freemium service, which is a project management system. This service generates quite a lot of emails, actually thousands a day. These are all kinds of notifications to users about the changes that took place and the daily due/overdue reminders for tasks. Users can also update the system by replying to a received email. As the number of users grows, we noticed that our SendGrid bills rise accordingly. For a freemium service, we naturally would like to minimize them. We also wanted to understand how effectively we send emails to make sure we do not send them nowhere, paying SendGrid for delivery.

We have found ourselves doing detective work more frequently, resolving mysteries of someone not getting notifications from our system or someone responding to a received email from us but not seeing their update in the system. Thus, the second problem was our inability to deal effectively with user problems related to email delivery. We had to constantly search and compare our own database and SendGrid’s reports and activity logs. Though it took a lot of time, it often did not give any results. After sending an email via smtp we have not had any connection between records in our database, and the result on the side of SendGrid.

Read the rest of this entry »

Transactional email deadlock

Transactional email deadlock

Today I would like to tell you about one real story about email delivery and SendGrid. In the process of investigating its root causes, I had to talk to SendGrid’s customer service and the problem in general has not been solved, but we have a plan. I also hope that someone from the readers is having similar problems and will be able to help answer the questions at the end of this post. For those who are only going to use systems marketing themselves as transactional email (SendGrid, MailGun, Mandrill), I hope this post will help you understand what problems they help to solve, and what type of problems they don’t, and whether or not to use such systems in general.

Since last year, we have been developing and supporting one big SaaS project management system using a freemium model with development teams located in the United States, Australia, Bulgaria and Ukraine. SendGrid is used to send and receive emails. It is obvious what kind of notifications such a system will send – registration, email confirmation, password recovery, but mostly they are update notifications from users – a new comment is posted, a task is due and so on and so forth. I have to say that we have had some experience with SendGrid. When we added the functional monitoring feature to Nerrvana (link) we started using SendGrid, but the amount of emails sent by us immeasurably small compared to our project management system, and so here, we first encountered problems with its use.

So what was the deal?
Read the rest of this entry »

Tricky sorting technique in MySQL

Recently, I faced an interesting challenge and I want to share my solution with the readers using a simple example. Suppose we have a list of TODO items. Each entry in the list may have a due date, the priority and creation date.

Now, suppose that you need to get the records from the database, sorted this way – first, show records with due date in ascending order, second, show records with no due date ordered by priority from higher to lower, and finally, show records that do not have due date and priority and sort them by date created. The first thing that comes to mind is to write this query:

SELECT * FROM todo WHERE ... ORDER BY due_date asc, priority desc, create_date asc

It would seem that’s all, the problem is solved, but there’s a catch – the first field (due_date) is not compulsory and that’s what we get as a result of this query:

Read the rest of this entry »

Grow file system on Fedora on VMWare

In this post I would like to show how to increase file system space on installed Fedora VMWare instance. You might need it if you use VMWare (and we know many people do) to spin VMs for Selenium testing.

In this particular case I use I installed Fedora and allocated 10GB but later I started using this VM for quite large databases and free space quickly disappeared.

# df -k
Filesystem                    1K-blocks    Used Available Use% Mounted on
devtmpfs                         498132       0    498132   0% /dev
tmpfs                            508060       0    508060   0% /dev/shm
tmpfs                            508060     772    507288   1% /run
/dev/mapper/vg_fedora-lv_root   7641992 6590912    656228  91% /
tmpfs                            508060       0    508060   0% /sys/fs/cgroup
tmpfs                            508060       0    508060   0% /media
/dev/sda1                        487652   84379    377673  19% /boot
# fdisk -l
Disk /dev/sda: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders, total 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000e3a8c
   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     1026047      512000   83  Linux
/dev/sda2         1026048    20971519     9972736   8e  Linux LVM
Disk /dev/mapper/vg_fedora-lv_swap: 2113 MB, 2113929216 bytes
255 heads, 63 sectors/track, 257 cylinders, total 4128768 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/mapper/vg_fedora-lv_root: 8086 MB, 8086618112 bytes
255 heads, 63 sectors/track, 983 cylinders, total 15794176 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

To grow disk space I went to VMWare console and added one more disk as shown below:
Adding a disk to existing VMWare VM
Now we can see a new disk in “fdisk -l” command output.

Disk /dev/sdb: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders, total 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

Now we create partition sdb1 covering all new disk using “fdisk /dev/sdb”.

Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p):
Using default response p
Partition number (1-4, default 1):
Using default value 1
First sector (2048-41943039, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039):
Using default value 41943039
Partition 1 of type Linux and of size 20 GiB is set
Command (m for help): v
Remaining 2047 unallocated 512-byte sectors
Command (m for help): w
The partition table has been altered!

Finally we just expand our volume group and file system:

pvcreate /dev/sdb1
vgextend vg_fedora /dev/sdb1
lvextend -l +100%FREE /dev/mapper/vg_fedora-lv_root
resize2fs /dev/mapper/vg_fedora-lv_root


Some time ago we translated to Russian ‘Marketing by sharing’ talk by Jason Fried at ChicagoConvergence 2009 conference. Today we would like to share how it works for us so far. These are the stats for our two blogs only – Selenium and Development. Stats for Nerrvana and Startyco are not included.
Marketing by sharing - how it worked for us

‘Answers’ – questions & answers portal for your site

'Answers' - questions & answers portal for your site

Most of all we would not want to turn the Answers announcement into advertising. Instead, we decided to share our thoughts about two kinds of software – subscription based and the one you can pay for once and own, and specifically about web applications. As a rule, web apps are not to be for personal use, and to work in peer groups, like school teachers, employees, software developers. Then we actually explain how and why an idea was born to create some downloadable web applications. You don’t think we made Answers just because we didn’t want to use existing SaaS? Excellent! Then tune in to the philosophical mood (pipe, rocking chairs, a fireplace, and Sherlock Holmes nearby are highly recommended).

Because the whole internet world creates web services with monthly subscriptions (with some variations) and sells these services for a lot of money to the end user, we, at Deep Shift Labs, believe that there are still fans out there who like the concept of buying and owning a piece of software. System administrators are not yet extinct, they are the heroes, who are able to maintain the server software without spending hours on it, because they are professionals in their field and as a result are efficient and valuable.
Read the rest of this entry »

Out of touch with the clouds

No pasaran!

We decided to translate to English Michail Emel’yanikov’s post as we think it brings some importrant questions many people forget to ask. Did you?

“Over the past week, there seem to be more and more articles and notes about cloud computing – periodical influx of interest to any topic; nothing out of the ordinary. But after reading the latest material, I experienced a little déjà vu. All of this was written a year ago, if not more; worded the same way, and applicable to the same situations. On one hand, purveyors of cloud services try to convince us that their corporate clients are enthusiastically clambering into the clouds. On the other hand – all these years there has not been a single vivid answer to all of the simple, obvious questions. Namely:

1. What happens to the data when its uploaded to the cloud after the completion of any actions specified by the customer (editing, data processing, pressing the Delete key on the user’s computer, working with the cloud’s infrastructure)?
Read the rest of this entry »

How Ideas are different from Answers

In our new product – Ideas, users will be able to vote for a published idea only. In Answers we called responses – answers; in Ideas we call responses – comments. Users can comment on an original idea to improve or discuss things with the idea’s contributor. Also users can like/dislike other users’ comments or reply to other users comments (see below).

Startyco Ideas

If Answers is a modern implementation of FAQ, where your users can ask questions and get answers, Ideas is your public roadmap channel, where you and your users can collaborate on your product’s or service’s future.

Administrators of your Ideas portal will be able to create idea statuses like – rejected, in development, implemented etc. and maintain your Ideas portal in an up to date state with them.

All planned new features – WYSIWYG, spam protection, mobile version, widget, oAuth authorization will be added simultaneously to Answers and Ideas.

Looking for something? Visit the archives.