LikeBack is a very effective way to allow your application’s users to contribute actively with your project.
It is composed by two parts:
- A frontend, the most important part, that which will be seen and used by the users.
- A backend, which the developers can use to see and answer to what users had to say.
In seven months of activity (we’ve started using it in KMess since february 2009) we’ve received well over 2500 comments: of those, the vast majority was useful to us: this should help understanding how bloody useful LikeBack is.
The flow of comments will be to you extremely useful to understand what your users want: we found that LikeBack really helped in giving the project a direction. It will be *their* direction – which needs to be also *yours*, if you want to keep your project alive! I think that 99% of the time, you’ll find the direction suggested by LikeBack comments will be the best one
Now a little tutorial on how it works, and how to install it (it’s not hard!):
A screenshot, as usual, is worth a thousand words:
Users can send four types of feedback: things they liked; things they didn’t like; bugs; ideas for features.
The frontend is a set composed by:
- a bar, which automatically moves itself to the current window, with the four icons corresponding to the four feedback types;
- A dialog, which is used to allow the user to compose then send the feedback;
- A “LikeBack” object, which is practically the only thing you’ll have to insert in your code, and allows you to customize how LikeBack will integrate in your application.
Once it is installed (more on this later), the user can use it in two ways. First, by clicking in the Bar icons, a very direct way; and second, by choosing “Send comment to the developers” from the Help menu. Once one of these action is made, the Dialog pops up. The developers can choose the languages they can read, to help the users choose how to write the feedback. Notice the online translator option (linking back to Google Translate)
After writing their comment, the user can choose whether he/she wants to remain anonymous or to be contacted back in case it’s needed. The obligatory privacy statement makes it clear that you developer won’t mess with the collected personal data – which amount to an email, the app’s version number, and which app’s window the feedback was sent from; anonymity or privacy assurance help keeping the user comfortable about telling his/her opinions to you.
Once he/she is done, the Ok button will send an HTTP POST request to your LikeBack installation, somewhere on the Web.
This is a simple web application, running on any web host with PHP5 and MySQL (you need root shell access to add some neat extras, explained below). Screenshots:
The first screenshot shows how flexible LikeBack is: you can show which bugs types to view or hide, and customize the list however you may wish. The list itself shows a very generous set of details from each ticket, and the line color gives a direct visual key to the feedback types.
In the comment view, easily accessible by clicking on the comment text, you will be able to see an extended form of the ticket list details, along with the commenter’s email (if any). The remarks system is a very powerful way to communicate with the user: it allows to send your remark both to the ticket remarks list, and also to the user email. Using a certain script which must be installed on your mail server, the user will be able to reply him/herself to the remark, establishing a full and direct conversation between you and them. If this is not listening to your user base, what is?
Of course you can delegate LikeBack interaction to specific members of the team, to help keeping focus – we at KMess can get 5 to 20 comments each day, this means you could need to use a significant development time on LikeBack. Trading and sharing burdens between team members is even more important!
Another *great* feature of LikeBack is Trac triaging – you can enter a Trac ticket number, and LikeBack will close the ticket as soon as it is marked as done in Trac, also posting a remark about the event This can be expanded of course, making a Bugzilla interaction plugin is surely not hard!
How do you get LikeBack up & running? At the time of writing, the best way is checking out the LikeBack SVN; we will soon release version 1.4, which will also be packaged on SourceForge as a tarball.
Here’s the LikeBack SVN repo:
Installation instructions about the backend are also present in the README file:
- Install the Smarty library, usually by installing the smarty package on your server’s shell, or by installing it locally on the LikeBack directory (this is not tested at the moment, can you tell us if it works?)
- Put the Likeback backend/ directory contents in a publicly accessible location, say /likeback/ on your server, or somewhere less accessible/guessable, if you want
- Restrict access to admin/ by HTTP/HTTPS authentication
- Copy db.conf.template.php to db.conf.php and modify it with your database’s access details. We recommend, if possible, to use a separate username and password only for LikeBack, with only access to the LikeBack tables
- Make sure the user that runs all scripts can write to admin/templates/cache
- Run admin/install.php
- Optionally, to have LikeBack send weekly reminders to you, add a crontab entry to run cron/sendReminders.php weekly (see cron/crontab file about this)
- Test your installation!
When it’s ready, move on to the frontend! Copy the frontend/ directory in your source tree. Then we need to add LikeBack to a window: usually, the first QMainWindow which gets shown will be the best place for LikeBack. From the moment it’s enabled, the LikeBack Bar will move to every window or dialog automatically. If you want to add the menu entries to send feedback in other windows, you can instance LikeBack somewhere global, then call likeBack->createActions( actionCollection() ) whenever your other main windows are instanced.
Include the “likeback.h” file. Then, here’s the code to instance and set up LikeBack initially:
- Instance the LikeBack object:
LikeBack *likeBack = new LikeBack( LikeBack::AllButtons, true /*showLikeBackBar/ );
The first argument allows you to choose (with ORed flags) which of the 4 available feedback types you want to enable. The others will not show up anywhere.
The bool argument allows you to initially show or hide the LikeBack Bar – but the user can override this option with the Help menu checkbox (also added by LikeBack).
- Then you need to set up where to send the feedback; that is, your server:
likeBack->setServer( "www.example.org", "/where/you/set/up/likeback/send.php", 80 );
- You can also choose on which windows the LikeBack bar is allowed to show up:
likeBack->setWindowNamesListing( LikeBack::AllWindows );
- An important line: choosing which languages are known by the development team: at least one of each team members which have access to the LikeBack web interface must know at least one of the language locales you specify here (use the ISO short format in the list):
likeBack->setAcceptedLanguages( QStringList() << "en" << "nl" << "it" << "de" );
- Finally, add to your window the LikeBack menu actions:
likeBack->createActions( actionCollection() );
and in your ui.rc file:
<Action name="likeBackSendComment" />
<Action name="likeBackShowIcons" />
- If you don’t use a KXmlGuiWindow, but a plain KMainWindow, add the actions like this:
KActionCollection *collection = new KActionCollection();
collection->addAssociatedWidget( this );
likeback->createActions( collection );
menu()->addAction( collection->action( "likeBackSendComment" );
menu()->addAction( collection->action( "likeBackShowIcons" );
See, it’s not really hard! And I must assure you – it pays off
We didn’t invent LikeBack. We first learned about it from BasKet Note Pads, when KDE 3.5 was on all of our desktops. We adopted it and, around october 2008, ported it to KDE4 – but only activated it in February 2009. Since then, we have improved it dramatically, and it’s really better than it was before. And we’re not done at all!
We’d like to see LikeBack in a lot of apps! If you have any question feel free to poke us (Valerio Pilo and Sjors Gielen):
- on IRC: #kmess on Freenode
- on our forum: http://www.kmess.org/board/
- via email: firstname.lastname@example.org
Thanks for reading
PS. on a funny side, it took 2500+ comments to get our very first insult