A couple of decades ago, Alice thought of starting a software shop.
She knew what she wanted to build, and she was good at programming. However, only when she got out to start this venture did reality hit her. She had to:
- Setup a comfortable space for people to sit and work at.
- Assemble a team of smart people from within the vicinity.
- Manage the team workflow.
- Make sure they shipped quality code.
Alice felt disheartened. This was too much to ask of her at that point with limited capital and time. She dreamed of a time where setting all of that up would be easy. An office with no walls, yet a close knit team. She tucked away that dream neatly in a corner of her mind, and started a restaurant.
Fast forward to 2016.
The evolution was rapid. With every passing day, month and year, more people were getting on the Internet. The doors to eternal knowledge were open. The curious ones learnt, the smart ones researched and taught, and everyone connected with each other. Humanity evolved with the evolution of Internet, and boundaries began to fade.
Alice was happy, but her dream remained. She, again, thought of starting a software shop.
However, this time things were different. Quite contrary to being disheartened a long time back, she was overwhelmed today thinking of the options she had. She revisited the list she made back then, and started ticking off the items one by one:
1. Setup a comfortable space for them to sit and work at.
Alice had detested this idea from the beginning onwards simply due to the sheer overhead involved. In the current scenario, it didn't seem like a requirement as well. No one really liked getting stuck in traffic everyday. Besides, reliable Internet was not just confined to 'offices' anymore.
Self motivated people were good at managing their time and discipline. There really wasn't a need for caged cubicles anymore. So Alice decided to not have an office space. However, the challenge was to find these people.
2. Assemble a team of smart people from within the vicinity.
The idea of "being in the vicinity" was already out of the window. Smart people were not just the ones being churned out from universities and colleges. They were to be found around the world. With the Internet reaching millions everyday, Alice focused on identifying and hiring them. The challenges involved were:
Smart people like working with smart people.
This essentially means that if you want good people to join you, then you yourself must be good. Your ideas, experience and knowledge must be on par with the people you're hiring. However, you can have all these qualities and still be bad boss/manager. So watch out. Alice, as you already know, was extremely good with people.
Identifying smart people.
There are various avenues both online & offline to gauage a potential hire's skill. A couple of them being:
Open Source code.
Code hosting websites such as Github, BitBucket, Gitlab etc usually give a good enough peek into a person's work.
Competitive programming websites. There are a few of them around like Hackerrank, Codility, Project Euler, CodeWars etc.
Community certifications. Having attended RecurseCentre or having been a part of GSoC speaks volumes about a person's potential.
Recommendations. The most reliable and fool proof way of getting good hires. Maintaining a strong social circle within the tech community will help you get connected to reliable potential hires much easier than any other avenue. This also means having an online presence. People have their choices when it comes to that - ranging from social networking sites to blogs to IRC channels.
Mostly a by-product of maintaining a strong social circle as mentioned above. Attending conferences, meetups and other tech gatherings happening around you can lead you to have interesting conversations with other participants. It is no secret that many a working realtionships are born this way.
Put yourself on the map.
There are many people looking out to see whoishiring. Positioning yourself on the map to be discovered by them is a key to augmenting your hiring options. You know how the old saying goes right? One site to rull them all, one site to find them, one site to bring them all, and in the light bind them!
Well, not much to be said there. Good talent doesn't come cheap.
3. Manage the team workflow.
As you might have guessed, Alice went out of her way to identify and hire excellent talent to work with. With that done, she realized that no matter how disciplined people are, a team needs to be managed. Management had different aspects.
The strength of a good team lies in its ability to communicate well and in real time. This is the biggest sacrifice that Alice had to make when deciding not to have an office space. People present together in a physical space for the same purpose usually are able to communicate very easily with each other. Remote work does not allow for that. Alice had the following options:
Most people were comfortable with typing in their thoughts. Typing also makes it easier to share links and code snippets. This was the primary source of communication, and among the myriad of choices out there, since IRC was old and out of fashion, Alice settled on using Slack. Of course, Hipchat was around, but Slack was the new kid on the block. It was slick, had good archival and searching systems plus enough plugins to capture real life emotions on text based chat.
Humans love putting faces to everything that they see. It is no different for a remote team. Everyone likes to know who their peers are beneath mysterious usernames such as DarthVader404 and TheWorkingDonkey. However, the inertia is much stronger for a video call than IMs. Hence Alice encouraged her employees to setup dedicated times to get on video calls once in a while to discuss the work at hand.
Available technologies, as usual, were many. Depending upon the mood, Alice's team usually switched between Google Hangouts and Skype.
Weekly conf calls.
With everyone working out of their own spaces, it was important to sync once in a while and take stock. This was done by designating one day of the week for conference calls. Going over the list of tasks achieved over the last week, and discussing on the ones to be delivered over the coming week, this conf call was usually done over Slack call itself, or over Skype/Hangouts.
Multiple people working on the same project is the perfect recipe for conflicts - not just in interests, but in the files that code is written in. Alice had to ensure collboration and hosting.
Version Control System. Alice picked Git. Of course, there are Mercurial, SVN, etc to choose from, and it is more of a personal choice.
Hosting. Among bitbucket, Gitlab and Github, the popularity of Github helped to quite an extent in making this decision. All of the code being written by Alice's team was hosted on Github. As we'll see later, this has other benefits as well.
Workflow. Deciding to use Git and Github itself tends to push you in the direction of using Github's workflow. You can read more about it here.
Continuous integration. Keep pushing, keep breaking, keep fixing. Multiple deployments happening in a single day is a way of life today. You want to do all that is in your power to make sure you minimize the amount of breakage that actually goes into deployment. Setting up a CI server helps the cause. There are many out there to pick from - Jenkins, Travis CI, Bitbucket Pipelines, or Gitlab CI.
At this point, Alice started wondering if she'd need a management tool to manage all the productivity tools. However, maintaing a balance between these tools was inevitable for the smooth functioning of a remote team. Things fall apart the moment one member of your team looses track of something and doesn't know where to look at.
Task creation and assignment. From using an Excel sheet to google spreadsheet to FreshDesk and Jira, there are quite a few options available to choose from. However, Alice knew better. She thought of the entire project as having horizontals and verticals - the horizontals being the different modules, and the verticals being the features that makes up each of those modules.
She chose Trello to keep track of the horizontals and Github issues to keep track of the verticals. Each trello card (representing a module) would have a check list of the corresponding Github issues to be worked on. This even helped in separating the module level and feature implementation level discussions.
Milestones and Deadlines. This was included within both Trello and Github.
4. Making sure that quality code is shipped.
You trust your employees just like they trust you. Alice knew this was the backbone of her software shop - The trust. However, trust does not mean leaving you unsupervised. No sir. This brings us to the problem of ensuring code quality.
No matter how good a programmer you are, it always helps to have an extra pair of eyeballs on what you're writing. Code review helps fine tune your code, help figure out potential mishaps and even allow more experienced folks to share their knowledge with you.
As usual there are a ton of choices to pick from - Crucible, Phabricator, Upsource, etc. However, since Alice had decided on Git, she decided to pick Gerrit and stick with it. Again, the exploration itself will steal much of your time.
If there is one absolute, it is that you can never finish learning technology. Everyday something new pops up and whatever exists, are on a path of continuous improvement. How do you keep your team trained and on the cutting edge?
Apart from self exploration and attending tech gatherings, the online resources are numerous. Masters of the craft conduct courses on various platforms ranging from edx to coursera to udacity. Pick one, and offer advice and help for your employees to learn.
As you can see, Alice has spent a while analyzing the situation. She now happily runs her software shop, growing her team, around the world, without boundaries.