Welcome to part two of our three part series describing the various lessons we learned during our first year of a software startup. You are encouraged to read the first part if you haven't already!
In Part 1, we described our business' context and how we eat our own dog food. Indeed, we use the software we produce on a daily basis, helping us create quality products. A parallel can be made with our distributed team's communication patterns. Simply put, we're not all at the same central office, talking to each other all day. Our structure resembles that of a franchisor with franchisees distributed a several physical locations. The main reason we are distributed is to keep costs down while we develop our core infrastructure, but it does have the interest side-effect of forcing us to use the same communication tools a franchisor would.
Not only do we not work in the same building, we're not even in the same city! Because we work in independent offices, we have a greater control over our environment, which increases our productivity. Spolsky often talks about how developers should have private offices because outside disturbances kick us out of our zone. You can respond to your email every 15 minutes, but you can't make someone wait at your door for 15 minutes while you polish off a complicated algorithm.
In any case, given the fact that most geeks are not social creatures, you probably think that doing the majority of your interactions over the Internet is great, right? In reality, it's not always convenient but we've started to become really creative (and efficient) with the tools we found to maximize our interactions.
We spend most our time
chatting coordinating on Google Talk and move to Skype when voice conversations are required. Over time, we discovered some pretty nice software to communicate and we want to share these tools with you in this article.
- How do we talk to each other and with people outside our company?
- How do we exchange files?
- How do we manage our requirements?
- How do we demo our software, how do we program in pairs?
Lesson 4) Talking to People
Carrier pigeons might have played a vital part in WWII communications, but we're using more modern techniques.
Skype is the obvious choice for voice communication over Internet. Don't tell us that you haven't heard about this tool before! Because we are four partners in LavaBlast, we often need to have conference calls. All our meetings are done online via Skype conference calls, at no cost to us. Furthermore, we can call up a client on their regular phone using SkypeOut. SkypeOut will call the client's real phone and will connect them to our conversation, at very affordable rates. Indeed, for $3 a month, we obtained unlimited outgoing calls to Canada and the US. Setting up a conference call is really easy and the quality is good (most of the time). You simply need a good microphones and you're good to go. In addition, if you have a webcam and a good Internet connection, the video quality of Skype is just amazing especially compared to MSN. Talking to someone who also has a good webcam and a good Internet connection is almost lag free, in my experience.
Having a central phone number for a distributed office
Since we have a distributed office, we need to have a central phone number. The most affordable solution that we found was Skype for business. Basically you simply need to register a SkypeIn number anywhere in the US (not available in Canada yet) and when people call this number, it calls you on Skype. The cheapest way to get your incoming phone number is to purchase Skype Pro (at $3/month) and purchase the number for $38 a year (and it was operational within minutes of purchase!). You can forward calls to another user or normal phone and even get voicemail with Skype Pro. Optionally, you may install the business version of the Skype program for additional functionality. Therefore, all the incoming calls go to our main salesperson and, if more technical details are required, the call can be forwarded to us. Skype for business has a nice business control panel to control Skype credit purchases, phone number assignments, and much more. Additionally, because the phone number is associated to the company, we can redirect it to a new person if an employee is replaced or if someone is on vacation. We could have a 1-800 number, but I don't think we have the kind of call volume that would justify having one just yet.
We found the perfect phone number for LavaBlast: 1-201-467-LAVA (5282). SkypeIn personal has a nice interface to check if a number is available, but the business panel interface doesn't. If you want to purchase a specific number, I wish you good luck because you have to generate the numbers one by one! We wanted a number that ended either with BLAST or LAVA; we found the number with the SkypeIn personal interface and then tried to regenerate it, one number at a time, in the business panel. We finally found one that ended with LAVA but couldn't find one that ended with BLAST. The best way we found to generate multiple numbers was to press Ctrl and click like crazy on the generate button to open new pages in new tabs. We eventually found the number we wanted!
Lesson 5) Exchanging Files
There are lots of cool startups focusing on better ways to exchange files and we're keeping an eye on them. For now, here's what we're using.
As software developers, we obviously use source control to manage our code. No surprise here. We even deploy our web applications using Subversion.
We've developed a document repository in our franchisee/franchisor collaboration solution. We post our user manuals and a few other documents on there; it is our distribution center for completed documents.
We use Microsoft Groove which is a party of Office 2007, as our main internal document management tool. Groove is much more than a document repository, but we only use this feature. Groove is simple to use and install because it distributes the files on all the peers instead of having to setup a complex server. Furthermore, it is better than a shared network drive because it has change notifications plus it can be accessed even when you are offline. There are a few drawbacks, but in general, it's a good simple solution for the low volume of Office documents we work on.
Lesson 6) Requirements Engineering
The first post on the LavaBlast blog was related to requirements engineering and how we managed our pile of requirements written on the back of (sometimes used) paper napkins. More seriously, we've found it very beneficial to collaboratively define our software requirements with our clients. Constant feedback is the key to writing good requirements, and using collaboration tools is a must.
We've been playing with ScrewTurn wiki as our main wiki over the last year, for both for our internal use and to interact with our clients during the requirements engineering process. It is very easy to install (trivial) and it is very very fast. Editing a page is very pleasant because it is nearly instantaneous when you save a page... it just feels blazingly fast. Furthermore, because it is a free and open source project, you get to spend money on Super Mario Galaxy instead.
During our software engineering capstone project, we used TWiki as our primary requirements engineering tool, a couple years before the strategy was discussed in IEEE Software. Although we've enjoyed ScrewTurn's simplicity during the last year, I think we're ready to revert back to the more feature-rich TWiki. Installation is a pain (less now than before), but the syntax much more natural. Furthermore, we already have the infrastructure in place (using page meta-data) to let us manage our requirements.
Lesson 7) Desktop Sharing
Today, sharing your desktop is an essential operation for any software startup. You can easily demonstrate applications to potential clients or perform pair programming, without having to be at the same physical location.
Trying to explain something to someone over Skype is not always fun, especially when the client is not a technical person. Because a picture is worth a thousand words, showing software is much quicker! During most of our first year, we used Unyte to do just that. With Unyte, you simply have to start the application, decide which window to share (or share the entire desktop) and then send a link to the person (or group of people) that need to see it. Recipients click on a hyperlink and load up a browser-based Java applet to see the shared windows. It's as simple as that. The client doesn't have to install anything and it's fast! The host will receive an alert when the viewers can see his screen. Unyte, used in conjunction with Skype, is really a great mix for meetings and sales demonstrations. We used the version for five people and it worked well, until we found Microsoft SharedView.
A few weeks back, we discovered Microsoft SharedView while it was still in beta. SharedView is similar to Unyte, but 15 people can participate in a shared session. The only big drawback is that everyone has to download the software. So if you want to quickly present something to a client, it's a little bit more complicated if they have to install it. However, SharedView does allow any participant to share their desktop for the others to see (only one person can share at any given time). During a software demo, we used this capability to have the client show us their current point of sale! Additionally, the software gives other people the possibility to take control of the session and perform operations on the computer that is sharing an application. You can also share documents pretty easily with everyone and send chat messages, but we still use Skype for voice communication. We now prefer SharedView to Unyte when it is a possibility to install software on every participant's computer.
Lesson 8) Blogging!
We've been able to connect with tons of great people thanks to our blog, and have lots of fun perfecting our writing skills. We find that figuring out what to say (and what your audience is interested in hearing) is the hardest task when you start a blog. We still don't know if we should focus on giving away code or writing more experiences pieces like this one. Let us know!
Our blogging software, BlogEngine.Net, is simply terrific. Free, fast, really easy to theme, has some good extensions and integrates really well with Windows Live Writer. One of the main advantages for us is that it is open source and it is written in .NET, allowing us to perform minor behavior changes as needed. It still has a few bugs that can be annoying, but from what we have seen so far, it is performing really well. It supports multiple authors, an important feature for us because we have two people posting on the blog.
Lesson 9) When not to use communication tools
The most important lesson we learned during our first year of operations as a distributed development team wasn't a revelation but rather a confirmation of our expectations. Communication and collaboration tools are great, but technology doesn't solve conflicts. We're a closely knit team and have worked together for a number of years, greatly reducing the number of conflicts we may have. The conflicts we have are generally superficial, but as an example, let's consider an architectural decision where the two decision makers have divergent opinions on the best solution. Although instant messaging is great for efficiency reasons, it is not the best medium to argument on the merits of your solution. Indeed, we've all seen the politically incorrect "Arguing on the Internet is like running in the Special Olympics; even if you win, you're still retarded". The main problem is related to the lack of emotional expressiveness of concise instant messages or emails and since it is discussed in great lengths by very good authors, we'll leave a detailed analysis of the situation to them! As a side note, firing people via email might have seemed like a good idea for RadioShack, but we at LavaBlast shall stay away from such brilliant strategies!
Communication is the most important part of starting a business. Even if you're the only person in your company, you still have to communicate with your customers! We hope that you'll discover at least one cool collaboration tool today! Remember to come back next week for Part 3 of our series.