How to get your team organized with 5$ per month

Some time ago I had a pleasure (no irony intended!) to start working in a company with no established developing process at all. There was no issue tracking, no communication tools, no code hosting…nothing (nothing but a Russian Bitrix system, but it doesn’t count, since it’s awful and nobody was using it). Now I want to share with you one of myriads of possible approaches. As it happens we pay only 5$ per month to make it work.

How to start?

First of all you’ll need a webserver. We decided to pick up the cheapest DigitalOcean droplet which is available for exactly 5$ per month. You can pick Linode or any other server, where you’ll be granted full root access. DigitalOcean comes with a fancy possibility to create a Redmine-Droplet in just 55 seconds, this is just what we did.

Where to host code?

Trust me, even if you have just one developer you better start using version control. Github is the most common service just to do so, however if you can’t afford sharing your code with the community you got to pay for private repositories. A wide known alternative would be Gitlab, which not only allows you to host the service on your own machine, but also doesn’t charge you for creating private repositories if you continue using on-demand version. I didn’t manage it to install Gitlab on our 5$ droplet (maybe I’m just not gifted… maybe it has something to do with recommended RAM size of 2 Gbyte and two unicorn worker units to be able to handle http requests – 5$ droplet got only 512 MB RAM), so we’re using private on-demand repos. However if you manage to install gitlab on your machine the following routine will be much easier, since pulling from Gitlab won’t requre any hooks as it will be on the same machine as Redmine itself.

How to connect them?

You’ll probably don’t want maintaining two systems at a time. This is where so called hooks come in play. You can try and install https://github.com/phlegx/redmine_gitlab_hook but for me, although I set up (at least I suppose so) everything correctly, it didn’t work.  What I did instead was following:

  • create an ssh-key on your server, where redmine is hosted (since chances are you won’t be able to copy the key to your clipboard you’ll need to send the file to your local machine first via scp
pbcopy < .ssh/id_rsa.pub
scp your_username@remotehost.edu:foobar.txt /some/local/directory
(I never know how to connect to my local PC, so instead I connect to remote machine and download the file)
For example - scp root@192.168.0.1:/.ssh/id_rsa.pub /directory_created_for_the_key
  • now comes a tricky thought – since Redmine hooks only its local repos but your local environment is another one, we need a workaround. As depictured below you need to set up your remote origin as gitlab
git remote add origin git@gitlab.com:your_project/your_repo.git
then you push using 
git push -u origin master
Gitlab Redmine connection visualization
Gitlab Redmine connection visualization
  • To keep your Redmine repo up-to-date, you’ll need, first of all, to create one (on the Redmine server) – simply git init /home/redmine_projects/project1
  • Create a cronjob – nano /etc/cron.d/sync_repos
  • Repeat the line for each repository (app should be the owner of the repository. In our case it is “root”)
    */5 * * * * app cd /path/to/project.git && git fetch origin && git reset --soft refs/remotes/origin/master > /dev/null
  • Wooosh! You’re done! Now every push will be visible just 5 minutes thereafter in your Redmine repo-tab.
Now your repo on the server where redmine is installed is always up-to-date (with a 5 minute delay).
Now your repo on the server where redmine is installed is always up-to-date (with a 5 minute delay).

Keep in mind – the deadline is your pal

Usually there are posts and books (a great one though – “The Deadline: A Novel About Project Management”) about managing deadlines, however this post will be about setting them – even for yourself.

Are you nuts? Why should I willingly determine a deadline if there is no pressure from outside?

If you happen to be one of the more luckier people out there who don’t get stuck with deadlines from outside consider yourself still in the same boat. The answer is simple – there are always time limits. If someone says otherwise, slap them. A-l-w-a-y-s, meaning at any given point of time there is someone who will ask you after a few weeks/months/years

WHY THE HECK ISN’T DONE YET???!!

And believe me, you want to avoid that situation at any cost. So if you’re working in a tiny-shiny-fancy-nancy startup, realize – they will ask you. And sooner you get your project organized the better.

If nobody provides you any tools, information or cooperation at all, remember – where there’s a will, there’s a way. At the end of the day they paying you exactly for it – for you getting things done regardless of the “how”. So my advice – get yourself a few sheets of paper and a pencil, start a prototype, draw a silly face, a cartoon, then try to write down your project’s goal. Can it fit in one sentence? No? Think again. Eat. Sleep. Rave. Repeat. Try to think what components is the project made of – are there reocurring modules? Can you extract some pages?

Decomposition is the keyword

Work top down, from goals to tasks which can be estimated. This estimation gives you your ace card. The more time you got the deeper you should get, meaning if you have just a vague goal you could guess it as 5 months or 5 years, if you have 100 tasks each guessed by 4 hours, you get 400 hours, 200 working days meaning somewhat 8.5 months. Having such a value will give you a much better situation because it’s based on smaller estimations where even a 100% volatility won’t hurt much (the probability of having all 100 tasks estimated wrong by half is incredibly low).