A list of every tool we use to run our company and stay productive
As a software company, we need tools to collaborate, code, promote our product, and offer customer support. Here’s everything we use and how it helps us.
This list is the result of 9 years of hard work and solving challenges as they came. We hope you find something that’ll help you with your particular challenge, or just try out a few new apps.
(You’ll notice we use a lot of tools that have the same functionality — that’s because each has its unique purpose. Also, different team members have different preferences.)
To keep up with our to-dos and work-related tasks that involve more than two people, we use ActiveCollab. We have lots of projects going on: one for all the reported bugs and feature requests; one for work in progress; a project for each product (Timer, Android, iOS, SupportYard); a project for each team or process in the company (support, marketing, management, HR); and projects for special things (UX and our blog). We use notes in ActiveCollab to save important information that’s accessed semi-regularly (release notes, workflow guidelines, and feature suggestions). ActiveCollab is our main information hub while other tools act as a support.
Slack lets us quickly and informally message each other, and chat in channels divided by interests like #support, #management, #dev, #builds, #feather, and #marketing. We also have a #chitchat and #general channel for banter, funny links, and questions (like where to buy a good burger or who has some aspirin). Direct messages are good for quickly sharing a file or a piece of text, while channels are good for sharing updates and getting instant answers to burning questions.
Dropbox is great for working together on the same assets and accessing them regardless of the computer you’re on. We have a common Dropbox folder where we put all our designs so they’re accessible to everyone; it avoids asking “could you send me file X”, working on it, and sending back the updated version — and do so a hundred times a day.
To record bugs and show developers the problem and how it happens, we use QuickTime. It comes with every Mac, the video quality is excellent, it’s easy to use, and the file size is small so we can quickly attach it to a task in ActiveCollab.
For collaborative writing and proofreading (blog posts and help articles), we use Google Docs. We share the link to the document, let people make edits (which the person in charge approves or rejects), changes are easy to see, and we don’t have to install anything.
Google Sheets is like Excel, only there are no files we need to send back-and-forth — it’s all one resource you share a link to and edit in a browser. It’s great for keeping complex information in one place. Here we keep our survey results, feature requests, a list of people who want to be notified when a certain feature is released, etc. It’s a robust solution — at least until we build our own CRM.
We use DokuWiki as our internal knowledge base. It’s an open-source project that we installed on our server. Here we keep FAQs and useful information — like links to the tools we use, support guidelines, coding style guides, etc.
Our main support tool from which we reply to customer emails is SupportYard. When we receive a support question via email, we can see the message in SupportYard and assign it to someone on the support team. It’s free for up to 5 members and easy to get started with. The integration with ActiveCollab will soon let us connect tasks and tickets.
We communicate with our website visitors using LiveChat. A piece of premade code on our website creates a pop-up so visitors can ask us questions in real time, right on the spot — it’s like having a sales clerk next to you if you need anything. For one-on-one calls, we use Skype and have a custom number you can call for free.
For holding webinars and live demos, we use two tools. First, customers pick a date when they’re available on YouCanBook.Me. It takes care of managing time zones, sending the reminders, and letting us know how to prepare for each webinar. When the date comes, customers gather their team and go to Join.Me. There we show them how to use ActiveCollab, guide them through functionality, and let them ask questions — it’s like a teleconference and an interactive video tutorial in one.
We use TeamViewer for screen sharing and troubleshooting. A client grants us access to their computer, sees what we’re doing, and works alongside. It’s like being next to them and using the same computer. It lets us solve the problem directly and is more efficient than typing questions and suggesting solutions over a chat, email, or Skype.
For taking screenshots, we use Skitch. It lets us annotate screenshots with useful information, crop them, cross out things, suggest text improvements, and blur certain parts. It’s great for showing clients where to click; or for showing what needs to be changed in the app.
Nimbus is a handy Chrome extension for taking a screenshot of a web page that’s too long to fit in a regular screenshot. It takes a snapshot, scrolls the page, takes another snapshot, and so on until it gets to the end; then it pieces together all the snapshots and we can download the full screenshot.
Because we type a lot, often same phrases over and over, we use TextExpander. It lets us create shortcuts/snippets which expand to whole words when we type the trigger keyword. For example, we can type @sp and it will expand to email@example.com. There’s also a free Chrome extension, Auto Text Expander that works in the browser. For sending mass emails that have a similar structure, but each has to be customized in a small way, we use Gorgias— it prepopulates fields like subject and body and we just change the details.
To answer Twitter questions, we use TweetDeck. We have three columns: direct messages, notifications, and searches for ActiveCollab. We also set up Notify, a Slack integration which pushes notifications to a custom channel once a topic or our company is mentioned.
We host our videos on Wistia and embed them in our Help. Wistia shows user engagement for each video: what are the most viewed parts, which segments are skipped, where people pause, etc. Then we tweak videos so they’re more helpful (like cut parts that get skipped). We also replaced a bunch of static screenshots with videos, which are a lot more useful.
Screenflow is for creating video screenshots that’ll serve as content. It gives more control than QuickTime (used for disposable video screenshots) so we use it for creating tutorials (which need more polish and will last for a long time). Recordit is good for creating gif screenshots for blog posts and social media, so users see new features in action and understand them instantly.
As a payment gateway, we use FastSpring. When someone decides to buy ActiveCollab, they get redirected to FastSpring which takes care of secure payment. It manages monthly subscriptions and creates invoices. Our support team can access accounts and manually extend them, correct and transfer the account owner, or cancel the account. FastSpring can also generate coupons that we can use for promotions in our newsletter.
Each help article has a public discussion. Users can ask questions, leave comments, and help each other — thanks to Disqus, a commenting system you can put anywhere on your website. For example, on our self-hosted installation page, we have users who shared their installation experience and helped others who faced the same problem. It’s like a public support channel where everyone can participate and help.
For layouts and UI/UX design, we use Sketch. It lets us create mockups quickly and see what works visually. We design web pages, new in-app screens, icons, illustrations, and even blog assets in it. We never code without first working out the UX and UI in Sketch. It’s lightweight and lets us create an elegant solution in a matter of minutes. Thanks to it, we can spend more time thinking what works than manipulating vectors and pixels.
PhotoScape is excellent for quick photo editing. It lets us quickly crop existing images, combine them, add special effects, make collages, batch edit, and more. We can have an image for a tweet or a blog post in a few minutes. For complex image editing, GIMP is a great free replacement for Photoshop. It takes a while to learn and it’s not the prettiest solution, but it gives us all the control we need (though we rarely need that much control).
We created our Kanban ebook in Scribus. It’s a free alternative to InDesign. If you need more control when it comes to layout than what Word offers, or you’re creating complex a document with more than a few pages, use Scribus. There are great online courses on YouTube that can teach you everything you need to know.
We created our video tutorials and testimonials in Final Cut Pro X, a video editing software. Once we had a script and shot video segments, we started putting the tutorials together: we decided which recordings were the best, cut what didn’t work, added custom animation/special effects/music, exported the result to our Wistia account, and embedded the videos on our website.
To share updates and interesting content on our social profiles, we use Buffer. When we’re on a useful page, we can share it with a click of a button. And the best thing, it lets us schedule when we want to share them. We can put 20 tweets or Facebook posts and let Buffer spread them out through the week, at times we tell it.
We use Google Analytics for tracking metrics, like which blog articles were most read, how many visitors we have, how many of them leave within 2 seconds, what are the most accessed help articles, and how much time visitors spend on each part of the website. Also, we use it to track the success of our marketing campaigns with UTM codes and see where referrals come from. We integrated Analytics with FastSpring so we can see how much revenue each campaign and source brings in — a crucial metric you need to have in place before you even think about doing marketing.
For sending newsletters, we first used a self-hosted solution called Active Campaign, coupled with Litmus to test if emails work in different clients. But, we switched to MailChimp — which means no more hand coding each newsletter and hoping it looks good in every mail client. MailChimp offers a great user experience, newsletters are easy to make, and we don’t have to worry about ending up in spam or being blacklisted. All our users can now receive a short monthly newsletter containing the most important updates.
For A/B testing, we use Optimizely. It lets us create two versions of a home page (or a landing page), change some elements, and see which version gets more clicks and conversions. Tests are easy to set up and the results are displayed on a nice graph, as well as a comprehensive table.
Optimizely gives us hard numbers but doesn’t answer why one version outperforms another. For qualitative feedback, we use UsabilityHub. We show people different designs and ask which one they prefer; or if they can find where’s the sign-up; or what they think ActiveCollab is by looking at the homepage for 5 seconds.
We also use User Testing to see how new users interact with ActiveCollab for the first time. For example, we thought the flow for inviting users was great. But looking at a recording of how a real person tries to invite someone — and gets stuck — was an eye-opening experience that challenged our core assumptions. Thanks to these tests, we redesigned some sections and are actively working on improving user onboarding so new users have the best experience possible and continue to use our app.
Hotjar lets us see where people click the most on our website, what they’re interested in, and how many of them scroll all the way down. This way we know what’s engaging, what doesn’t work and come up with a better layout.
For surveys and research, we use Typeform. What sets the app apart is the intuitive way users fill out the survey (see example), which makes it more likely they’ll fill it out and we get the information. Plus, the reporting section looks great and creating forms is easy. When we need a more robust tool, one that works with complex data, we use Google Forms because of its out-of-the-box sync with spreadsheets.
For finding new leads on Twitter and people who’d be interested in ActiveCollab, we use SocialBro. It lets us find people who are interested in productivity or web design (for example), follow them, and let them know we exist and we can help them.
For bringing traffic to our landing pages, we use AdWords. We have campaigns, like Invoice Your Work and Basecamp Alternative, and we pay to show up in Google’s search results for keywords that have something to do with those campaigns. That way, we make sure people who need our software actually find it.
We have a blog on Medium because it’s such an effective distribution channel. Here we share how we work and what we learn — things that could help others so they share it. Medium doesn’t give us much control when it comes to customizing how posts look; but, at least, every post looks great by default and brings new traffic.
With that said, we have a blog on our own website too. It’s built in Jekyll (a static website generator) as it’s simpler and more secure than WordPress. Having a blog on our own website is important for SEO, getting new users and newsletter subscribers, and styling the content so it’s more engaging. We chose Jekyll over other tools because of its active community, exhaustive documentation, and we can find anything we google.
Sublime Text is the most popular text editor in the office for writing front-end code (as well as keeping notes and writing blog posts too). It loads fast, has tabs, plenty of plugins, and lets you be crazy efficient. Combine regular expressions, snippets & macros, and the right plugins like Emmet — and you can be very efficient. Also, be sure to check out the distraction-free mode and see why it's called like that. For backend programming, we use PhpStorm as it’s designed for PHP coding and provides all the comforts of a full IDE.
Gulp frees us from repetitious tasks like Sass preprocessing, minification, concatenation, includes, asset resize, live-reload, running a server etc. It’s a Node.js plugin that, when set up, runs various tasks we’d otherwise have to run manually when coding the website. It alone saves us a lot of development time and has a plugin for every monotonous task imaginable in web development.
For day-to-day SysAdmin jobs, we have custom Bash scripts that take care of jobs like registry cleaning, maintenance scheduling, updating user accounts, routine audits, image resizing, domain name expiration monitoring, log scanning, environment setup and more.
For monitoring the health and usage of our servers, we use two tools. Graphite takes all the statistical data and renders graphs; this makes it great for getting a quick overview. Graylog is for in-depth analysis, monitoring key indicators, getting notified when something needs attention, and searching the log for a specific case.
We host our company code on GitLab, and there we collaborate on it and track changes. It’s an open-source solution we host ourselves. We use GitHub for some open-source libraries that we need to fork so they work with ActiveCollab (like when there’s a bug in our app because a library’s method doesn’t function as we need it to).
SourceTree is a great GUI client for Git. While the terminal can be more efficient in some cases, SourceTree lays out all the information without us needing to ask for it explicitly. We can see when there’s a new commit, what and where the changes are in the local repo, see all the branches — all without explicitly asking for it, it’s just there and saves us from typing the commands. Our branching model used to be Git Flow, but we switched to GitHub Flow — it’s much simpler and covers every scenario well enough.
For continuous delivery, we use Jenkins. It lets us test and build ActiveCollab updates when we have enough commits for a new release. After we merge development commits to our production repository, Jenkins tests the code against test cases we wrote prior. If a test fails, we get an email. If it passes, it builds a new version of ActiveCollab and deploys it to our production servers so all our cloud users get the updated version. Jenkins also lets us automate big processes like account migration and translation service integration.
We use Jenkins for website deployment too. When we make a change in our GitLab repository, we tell Jenkins to rebuild the website and deploy it. This way we don’t need to manually access our servers on OVH just to change a typo. (We chose OVH as our host provider because of their supreme DDoS protection.)
To make sure we all develop in the same environment as the production, we use Vagrant. It starts a virtual machine on our Macs, runs Linux Debian behind the scene, and makes our development tools behave as if they were working in Linux. This way, we all work on the “same” machine and there’s no “It works on my computer” problem — which makes the transition to production smooth. Jenkins starts Vagrant before performing unit tests.
When we need a local server to test something, and setting up Vagrant would take too long, we use MAMP. It lets our support install one package (containing MySQL, Apache, and PHP) and start the server with one click, without having to work in the command line. Then we can look for bugs in the self-hosted edition, or fix a help article that can’t load without a server because of the PHP code in it.
Since we have a SaaS product, we need a tool to mass manage all the servers. Ansible lets us achieve consistency among all our servers. If we need to change something, we don’t need to go to each server individually — we just tell our Ansible what changes to make and they’re executed on all the servers.
For database manipulation, we use Sequel Pro. It’s a handy tool for manually correcting certain SQL records and troubleshooting during development. phpMyAdmin is a handy alternative used by non-tech staff to test the app; it doesn’t require much setup and can be accessed from a browser like any web app.
As for the ActiveCollab dev stack, we use PHP, Redis, MySQL, and AngularJS. To find out why we chose this stack and what the server structure is — check out this post.
If we come across a good text we don’t have the time to read at the moment (or it’s just too long and we don’t have the willpower), we put it in Pocket for later. We just press the browser extension button and it saves the article on our phone so we can read it later during a commute, even if we’re offline.
You know how sometimes you click on a link, and two hours later you’re somewhere else entirely — and you haven’t coded a single thing or done anything productive? That’s why we use RescueTime. It’s a browser extension that tracks how much time you spend on every website, checks if it’s work related, and gives you a number telling you how much productive you were today (and how you fare compared to yesterday). It’s a great app for policing yourself and seeing where your time goes so you can fix it.
To save quick notes while we’re away from the computer, we use Keep. It’s a Google product, works offline, and is very simple to use. If we write a note on the mobile app, we can later access it from our work computer’s browser. This way, we can access the same notes from different platforms, without the need to manage them. We can also save interesting passages from a Pocket article for a scrapbook.
To avoid spelling and grammar errors, we use Grammarly. It’s an extension that checks for errors anywhere we type in the browser and suggests solutions. The web app is good for a longer text — we copy/paste it into the app, which then suggests both spelling and grammar fixes.
Lastly, we rely on YouTube playlists and 8tracks for the music in the office (as we don’t have Spotify in our country). It’s not the perfect solution, but it’s good enough. YouTube is great for easily finding music when we know what we want to listen (album mixes, best-of playlists, and summer mixes), and 8tracks when we want to play a fresh compilation of stuff we never heard before, gathered around some vibe — perfect for when we don’t know what to play next and don’t have inspiration.