

Ask HN: How to hire freelancers specialized in continuous deployment? - Zeu5

Hi I am trying my hand in writing a SaaS application.<p>I have been reading blogs by Eric Ries and others. I am reading through Web Operations book by John Allspaw and I am determined to make sure I have Continuous Deployment for my SaaS.<p>Right now, I have a AWS EC2 instance running.<p>My SaaS application is 50% ready.<p>I use Git for Version Control and Capistrano to deploy though frankly I don't really grok the Capistrano script.<p>I hired a Linux expert from UK via elance to help me with installing multiple SSL certificates on a single AWS EC2 instance.<p>However, he is not that familiar with Capistrano and continuous deployment tools like Hudson, etc and he is unavailable for the next 2 weeks.<p>Searching through elance and oDesk using keywords like Hudson, Buildbot, Capistrano, Selenium, etc leads me nowhere.<p>Most providers on those websites specialized in software programming and not continuous deployment.<p>How do I hire a freelancer to help me in this area?<p>Note: I am based in Asia if that makes any difference.
======
SpikeGronim
Why does continuous deployment help? It helps by pushing many small updates
instead of a few large ones. For a large code base with many developers this
is a big benefit. To use it you need excellent automated test coverage and a
reliable deployment tool. For a small team, it is probably a waste of time to
setup.

I recommend focusing on only the most important tasks for making your product
"something people want" (to quote pg). If you're spending a lot of time
wrestling with deployment, automate it. If it is a few minutes a day, focus on
other things.

I'd also make sure to think carefully about which components you do and do not
learn deeply. If Capistrano is important to your product and you're spending
time with it, learn it yourself. If you're spending more time on frontend
website app development, learn a web dev framework instead. This is a
judgement call.

~~~
Zeu5
Hi Spike,

>If you're spending a lot of time wrestling with deployment, automate it.

Yes I want to reduce time wrestling with deployment. I also want to make it
easier for the freelancers that i hired to help me certain modules of the code
to test their work on my staging (which is currently non-existent).

I just do not have sufficient knowledge about sys admin in general. I really
want to reduce time spent on my non-core areas and focus on making my product
"something people want"

>If Capistrano is important to your product and you're spending time with it,
learn it yourself.

I had a very good experience hiring this Linux expert from UK who not only
installed multiple SSL certs for me on AWS and explained why in great detail.

That is why I am also seeking someone not only to implement solutions but also
to teach me the hows and whys of automating deployment.

I am sorry if my intention was not clear from the outset. English is not my
native language.

Do you know someone who possibly fits the bill?

Thank you for taking time out to answer the question here. I really appreciate
it.

------
gexla
First off, I wouldn't try to deal with a problem that you don't have. Right
now you have an app that is 50% ready and it seems that you are putting a lot
of effort into something that is far less important than your primary issue -
that is, finishing your app.

Also, in the hunt to figure out one problem, you have discovered another
problem. How can you rely on freelancers for this particular part of your
application? You can continue that line of thinking to - what do I do if
something breaks in this process that my freelance developer setup and I can't
get anyone to fix it right away? You might just be screwed at that point.

So, you are better off learning this stuff yourself, not bothering with it, or
getting someone with full devotion to the project who can do this stuff for
you.

For right now, work on that 50%. ;)

~~~
Zeu5
I thought having a proper continuous deployment helps with development?

I want to shorten my learning curve and honestly I have my hands full.

Other people created startups by hiring freelancers to do their coding, so
your argument about being exposed to the risks of not being able to fix the
very thing that the hires created also applies to them.

I am quite sure they were not stopped by that.

I do acknowledge that risk you are talking about hence I am also requesting
for documentation and a proper handover.

Basically, I would like someone to a) implement the setup for me once b) show
it to me how it is done c) undo everything and let me do it once.

If not possible to do all a, b, c), i dont mind hiring someone to at least do
a) and b).

Thank you for your reply.

~~~
gexla
Development and deployment are two different things. Just as development and
system administration are two different things. Deployment is actually more in
the realm of administration than development. So, I'm not sure you can say
deployment helps with development, though it's good for a developer to know
about the administration side also.

To say "Other people created startups by hiring freelancers to do their
coding" is too much of a blanket statement. This is something that has to be
carefully considered on a case by case basis. Outsourcing works in some cases
and it's a disaster in other cases.

You mention that you need someone to hand over the documentation, but that's
not the sorts of problems I'm referring to. What happens if the server hits a
hardware failure and you have to work outside the documentation to recover? I
run into crazy stuff with Administration all the time, it's never so tidy that
I can work any sort of documentation people could hand to me. If you don't
have a basic working understanding of what you are working with and nobody on
staff who can do the same, then you are at the mercy of the same issues you
are running into now.

I guess what I'm getting at is that you need a process which you can run
yourself even when things go very wrong. If you start relying on processes
that you can't handle in house (you) then those processes become liabilities
rather than assets.

~~~
Zeu5
>I guess what I'm getting at is that you need a process which you can run
yourself even when things go very wrong.

Okay. So now the question is how do I go about getting that?

~~~
gexla
Finish the app first. Once you get to a point where you are at least closer,
maybe almost to beta then you will see how deployment issues are a problem. I
would then start working on your deployment process. At that point, it's all
reading and Googling. ;)

~~~
Zeu5
I understand what you mean. You are telling me not to put the cart before the
horse.

I am thinking of deployment in the sense that, when i do a push of the repo
code to the staging, the unit tests are executed and if all tests are passed,
the code is then deployed on the staging proper.

Else it will be rolled back.

I do not have a) staging b) unit tests c) a hook to run the unit tests when
code is deployed to staging

I guess the above are important to development yes? Helps to discover bugs
easier right?

~~~
jtheory
A few thoughts on this...

Almost anything that can be automated can be done manually (or with minimal
scripted automation) first, often with pretty good results. It's generally a
good idea to start simple, and don't add complexity and extra work (like
configuring/managing automation!) until you are addressing actual needs that
you have... at that point, you can measure the pain to decide how much effort
to put into the fix.

The first step to automated deployment is manual deployment using a checklist.
Before automated unit tests, you have to write unit tests, and be able to
execute them manually. Before automated rollback, you have manual rollback.
Etc..

Are your developers able to run the entire project locally? If so, you are
starting off with frequent _local_ deployments, and if you encourage them to
implement features in small steps and sync with version control after each
step (i.e., at least once a day) then you also have achieved frequent
integration builds - each developer is doing them independently. Next, throw
in a script that executes all of your unit tests, and run that yourself daily
(don't automate it into every build... that'll swiftly make them too slow and
devs will start avoiding builds...), then email everyone when something is
failing.

In other words, with a simple cultural standard -- don't hide in a hole and
code for a week, and write unit tests! -- you have already solved (for a small
team) most of what continuous deployment addresses. And you haven't put any
time whatsoever (or spent money/time hiring someone) into setting up some non-
trivial automation yet.

The other advantage is that by the time you _are_ seriously ready to automate
your build, it may be quite different from what you have now -- it depends on
where your project goes, if you make a large pivot, mix in new technologies,
and so on.

This solution might work for quite a long time; are there good reasons to
implement continuous deployment instead, from the start?

Other than the cool factor, I don't think so.

~~~
gexla
Right, I agree with all this.

The unit tests will help you with bugs by ensuring your program is doing what
it should be doing.

You shouldn't be worrying about automating your testing before you have even
started writing unit tests.

Don't try to automate things you don't yet know how to do. Figure out how to
run it manually first.

Staging isn't so important at this point. Staging is generally most useful
when you are showing a working version of what you are building to a client
(or anyone who might need to see it) while you are still in development. In
this case, your code is always changing and you are regularly breaking things.
If someone needs to look at what you are doing then you need a stable snapshot
setup for them. This is especially important when you have multiple developers
because you don't know what the other guy is doing. The end game is that your
code has gone live and the "client" is your actual customers. This is where
being able to push your code to a staging server is critical. You need to be
able to "user test" it before going live.

~~~
Zeu5
>Staging is generally most useful when you are showing a working version of
what you are building to a client (or anyone who might need to see it) while
you are still in development.

Yes I do have 4 people to demo to.

>This is especially important when you have multiple developers because you
don't know what the other guy is doing.

Yes I have 2 developers working independently. I hired them to increase the
speed of development. Plus myself, that is 3 people working on different
parts.

so my question is how do i get someone to help me? or point me to the right
resources?

I am getting the feeling that i am being perceived as someone enamored with a
buzzword and ignoring basics.

I am also getting the feeling that the term continuous deployment is perceived
as a gigantic ball of multiple scripts and processes for deployment, only
suited for projects of a certain size.

I am going to state the following unspoken assumptions of mine. My bad that I
unknowingly assumed that other readers believe in the same assumptions.

Hope this will help the discussion.

From a web application perspective, my assumptions are

a) continuous deployment/integration means able to (as much as possible)
automate the process of deployment of the code on a server preferably one
where the configuration is identical to the production server. regardless how
much the code is completed.

b) continuous deployment/integration means able to (as much as possible)
automate the process of testing the deployed code against unit tests or
functional tests therefore allowing developers to add new features or re-
factor existing code without fear of integration risks.

Again, I would like to seek help to automate (as much as possible) the process
of deployment.

I already have Capistrano working but to a production environment.

I am not looking to hire from HN readers, though I do not rule that out. at
the very least point me to good places to look for such people.

Like a stranger in another country, I need directions. Either take me where I
want to go, or tell me where I can ask for better directions.

I hope that analogy works to express what I am asking for.

Thank you very much to all feedback so far.

