Hacker Newsnew | comments | ask | jobs | submitlogin
Time to hand over the reins before Capistrano costs me my youth? (groups.google.com)
460 points by codebeaker 192 days ago | comments


patio11 192 days ago | link

Thanks for creating software which has been an immense service to the community, and which I rely on quite a bit.

Tangent mode on:

Somebody really, really needs to write the How To Deploy Rails Without Losing Your Sanity handbook. I will buy a copy. It will sell thousands of them.

A lot of the problems with people's interactions with Capistrano are environment/ops problems which have known solutions that work, but which rely on people having a great understanding of arcane trivia which is spread across conference presentations, blog posts, commit messages, and the practical experience of the best Rails teams. Unless you're prepared for an archaeological expedition every time you start a new Rails project, you're going to do something wrong. You should see the bubblegum and duct tape which I came up with, and it mostly works, but I know it is bubblegum and duct tape.

Example:

Non-deterministic deploys of code from (usually) un-tagged source control

I feel lucky in that I was mentored by an engineer who decided to teach me, one day, Why We Tag Shit. But for the Why We Tag Shit discussion, I would be like almost every other intermediate Rails engineer, and be totally ignorant of why that was a best practice until lack of it bit me in the keister, at which point the server is down and one has to rearchitect major parts of the deployment workflow to do things the right way. Why We Tag Shit is only about a 500 word discussion, but it's one piece of organic knowledge of the hundreds you need to do things right, and it is (to the best of my knowledge) not covered in docs/QuickStarts/etc because that seems to be out of the purview of the framework proper (I guess?).

I'm sure that I'm ignorant of several of the hundreds of pieces of things one needs to do to do deployment right, as evidenced by my fear every time I execute my deploy scripts. I, and I must assume many other companies, am willing to pay for an option which gets me to a non-bubblegum and duct tape outcome.

Seriously, folks: there is a product here.

-----

raverbashing 192 days ago | link

I'll be downvoted by the "newer generation" but here's a pet peeve of mine

The same reason "why we tag shit" is the reason downloading packages from gem/pip is not enough

Who guarantees that when you do your deploy, the library you need is there? How many times did your build break because it had a glitch downloading the package?

Keep a way of rebuilding and deploying your software. All of it

-----

lamby 191 days ago | link

Mmm. I inherited a rather hardcore strain of liking entirely deterministic builds from being a Debian Developer and would never give up the dependability of it now. In fact, the thought of a build process connecting to the internet to download code just seems so utterly broken in my world view I actually find it difficult to explain it properly to others.

I'd love to be able to do it without embedding code copies, or at least have a smarter system than that.

-----

Volpe 191 days ago | link

But for the most part these build processes are for web apps... If your build can't connect to the internet, your web app isn't going to work (even if it can build).

-----

nirvdrum 191 days ago | link

Sure, but it's not like the entire Internet is up at once. If rubygems.org goes off-line, it shouldn't mean you can't deploy your Rails app.

-----

awj 191 days ago | link

Actually, your web server being able to make requests out on the open internet is considered a security liability.

If it lives behind a proxy, a web server being able to talk to anything but the proxy server and database is a matter of developer convenience.

-----

forgottenpass 191 days ago | link

Why does my personal (or intranet) webapp needs an internet connection to work?

-----

heavenlyhash 191 days ago | link

Sounds like you might like https://github.com/heavenlyhash/mdm ... yummy hashes for determinism, good for binary blobs, embeds semantic links in git, and uses git transports so you can swap out network or local filesystem trivially.

-----

bennyg 191 days ago | link

> I'd love to be able to do it without embedding code copies, or at least have a smarter system than that.

Maybe a section on the Server where gems lie, and a section on the hard-drive of your dev computer where gems lie - and then in a build process, it finds the gems with a certain checksum or tag or something similar. That's an interesting idea you have.

-----

regularfry 191 days ago | link

This. People seem terrified of running their own gem or apt repositories to mirror their dependencies - or even to host their own code.

The dirty little secret is that these things are trivial to set up. Anyone whose build or deploy has been broken by github, rubygems.org, ruby-lang.org or even rvm.io falling over is Doing It Wrong. While I empathise, I have very little sympathy for people panicking when github gets DDoSed again.

-----

mpvh 191 days ago | link

related - I've used this for running my own Gem server for years - It really is trivial: https://github.com/geminabox/geminabox

-----

regularfry 191 days ago | link

It can be even simpler. I use Apache serving static files out of /var/www/gems, and a cron job to rebuild the index every 5 minutes if anything's changed. Caching gems is just `rsync -avz $GEM_HOME/cache <server>:/var/www/gems/`. Publishing internal gems I've built is just scp.

-----

angelbob 188 days ago | link

Geminabox is simple until you want to run with a lot (500+) of gems. And then index-building is horrible - it basically never finishes.

The complexity comes in mirroring the right set of other people's gems, which match the exact combined set of all versions used in all your various projects.

There is not a good "pass-through" gem server that just automatically mirrors what it is asked for from RubyGems. There really, really should be.

-----

sjtgraham 192 days ago | link

> How many times did your build break because it had a glitch downloading the package?

This happens very infrequently in my experience, but it's simple on most CI servers to restart a build.

-----

kaffeinecoma 191 days ago | link

I also wouldn't normally expect a problem here, but this actually happened to me yesterday. Some 3rd-order transitive dependency resulted in trying to download a file from https://rubygems.org, rather than http. Apparently my SSL certs were out of date (on both dev and prod) and so I had to spend a few hours Googling how to make RVM + Ruby Gems update my certs.

It's really easy to write these kinds of things off as rare occurrences, but this is exactly the kind of thing that causes us to talk about "fear" when deploying.

Edit: solution was to run 'rvm osx-ssl-certs update all' on OSX, which is unsettling, as it installs certs all over the disk. Then on Ubuntu it was "yum update openssl", I believe.

-----

darklajid 191 days ago | link

Nitpicking: Yum on ubuntu us highly unlikely (it's using .deb packages, apt-get). That's what you'd use on a rpm based distribution (Fedora, CentOS).

-----

kaffeinecoma 191 days ago | link

You're correct, it was apt-get. I also have a Centos image around, so I have yum on the brain.

-----

ollysb 191 days ago | link

I've got this problem on a machine at the moment, what was the solution?

-----

[deleted]
davidp 191 days ago | link

-- Edit: parent was deleted; the suggestion was about a solution to use http instead of https. --

Security nerd mode activated; solutions like this make me a little twitchy, even when I have to employ them myself.

At the risk of stating something you already know, for the sake of pedantry the security implications of this fix are (at least) as follows:

- If you're checking the signatures of the packages you're downloading, this is probably OK, since even if an attacker spoofed your DNS to route to her own package archive, she would still have to compromise the package signing key to run her code on your system. On top of that, if you're using a hosting/PAAS provider, she'd have to compromise their DNS infrastructure first as well. - If you're not checking package signatures, then hopefully your system doesn't have any "interesting" information (including username/password combinations that might be useful on your or other sites). The hosting/PAAS provider DNS system is still a barrier, but now you're down _two_ of the protections on the chain of code executing in your name.

As always, there are multiple-order-of-magnitude differences in the amount of effort any given element of security is worth; the above fix might be just fine for 99% of applications, while for the remaining 1% some extra thought would be worthwhile. TBH I have no idea how common such "code hijacking" attacks are in practice -- if any "real" security professionals have that info, I'd be curious to hear your thoughts.

Offered in the spirit of helping folks with managers asking "why can't we just turn off SSL?"

-----

kaffeinecoma 191 days ago | link

Wish grandparent had not deleted his reply; makes it look like I'm the one suggesting turning off ssl. :-(

-----

numbsafari 191 days ago | link

If it happens even one time while you are in the middle of trying to resolve some "emergency", then it has happened one time too many. Customers don't care that you weren't thoughtful enough to keep a mirror of everything you were using.

I remember my first brush with this when Maven first started getting popular. Apache had to move their servers to a new datacenter and the server that had the drives for the main maven repo was lost in transit. It took five days to bring everything back up. During that whole time, nobody could build anything unless they had local copies.

Ever since then, I'm pathological about ensuring that I have a local mirror of all my dependencies.

-----

lamby 191 days ago | link

I'm pretty sure that wasn't the point - however infrequently it occurs, it violates the principle that only changes introduced since the previous build could have made it fail.

In practical terms, this means that you never know whether change X is faulty or simply the world is temporarily faulty.

(Of course, this may or may not be not useful to you to know.)

-----

sjtgraham 191 days ago | link

True, but a build could fail arbitrarily fail for any unexpected reason. Pragmatism is important, I'd avoid adding an inconvenient step to my build/deploy process just to mitigate an infrequent edge case.

-----

regularfry 191 days ago | link

> a build could fail arbitrarily fail for any unexpected reason.

Good engineering is the attempt to prove that statement wrong.

-----

byroot 191 days ago | link

Infrequent (I don't remeber that it happened to me during the hundred or thousand deploy I made with capistrano) and mostly harmless.

If the deploy fail for any reason, it's aborted, you just have to run it again.

-----

pyre 191 days ago | link

What do you do if the package servers go down for a couple of days? "Oops! Guess I can't deploy. Oh well!"

-----

lamby 191 days ago | link

Maybe my brain is wired differently, but having to tell a new hire "Oh yeah sometimes the build randomly fails and we just press retry until it works" would just feel kinda embarrasing to me.

-----

sjtgraham 191 days ago | link

That's not what I said. The point is one might as well say it never happens for how often it happens in practise. I have only had it happen once in recent memory, and even then it was because the hosted CI we use was experiencing issues.

-----

awj 191 days ago | link

Yeah, I'm right there with you.

Rubygems is a wonderful and powerful tool for getting libraries set up and adding new code. It's not really suited for putting things into production, especially when people think pulling old versions (for whatever reason) is acceptable behavior.

At work we install and set up libraries on development machines using bundler/rubygems, then go in and version lock everything after we know we'll be using it. Building a release-worthy version involves repackaging all of the gems as rpms so they can be installed along with all of our other software when building the new (virtual) server.

It's a pain in the ass, yes, but we have never had library issues crop up in production. I know exactly what is on the system, and fixing anything is an obvious and straightforward process.

You don't have to make things this formal/official, but it's pretty easy to achieve library version updates and know that what's on your server will work correctly at the same time.

-----

DrJ 191 days ago | link

for High Availability you would be a fool not to either run your own mirror, or package everything you need into a single bundle.

-----

talkingquickly 192 days ago | link

I'm about a third of the way through writing exactly that, covering deployment (capistrano) and basic server provisioning (chef), specifically for Rails apps. If you (or anyone) is interested my email/ twitters in my profile. Aiming to have it out end of 2013/ start of 2014 but would be happy to release it to a few people early for feedback.

-----

sjtgraham 192 days ago | link

Capistrano, what a Byzantine way to deploy software; I haven't typed cap deploy in about 3 years. Heroku's model of Git-based deployment and 12-factor apps has never given me a problem. Also Heroku deploys are de facto tagged as Releases (https://devcenter.heroku.com/articles/releases). I can't wait for Flynn (http://flynn.io/) to be released, it provides a Heroku-esque Git-based deployment strategy on any host.

P.S. I enjoy reading your comments as do many others, but I feel you hand-wave over important points sometimes, e.g. Why you feel tagging is important. If it truly is a 500 word discussion it shouldn't be hard to synopsise.

-----

patio11 191 days ago | link

It is tangential to the point of the comment, since this only gets you to 0.001% of a Rails deployment which works, but if you're interested:

Tags, plus sufficiently advanced dependency management and database migrations (n.b. not trivial!), allow you to track and reproduce past states of the deployed software.

For example: A customer reports a problem. You verify the problem exists. The customer reports that the system didn't have the problem last week Tuesday. If you want to know why, tagged releases (and a record of them -- incidentally, another one of the 643 things to know is "All deploys should be recorded somewhere") let you travel in time back to the software in use last Tuesday, verify if the customer's recollection is accurate (well, sorta), and then compare just what has changed rather than trying to run down the bug without any historical context.

Naming things also lets you talk about them, which is helpful, because you'll want to talk about individual releases of the software. (I mean, sure, you could use random hexadecimal numbers, but for whatever reason people find production_release_20131007_3 a bit more informative than 066630de00d242137efab6bf21b8ea04aeee7a1d. One glance at the first one tells you that it's the 3rd deploy from October 7th, assuming you've used the company's naming convention for more than a minute. The second one tells you nothing and is difficult to pull useful information out of without having to manually cross-tabulate it with you git repository, which would be unfortunate if it were e.g. attached to a log file, customer support request, or Wiki article about known-good releases for interacting with external systems.)

-----

drags 191 days ago | link

This is where triggering deploys through Jenkins is really helpful. Now you have a record of which SHA was deployed, when it was deployed and a copy of the console log for the deploy. Can't do much better than that.

-----

sjtgraham 191 days ago | link

Thanks it's not for my benefit, it's for the engineers that might not know better and blindly follow something you say because of your standing in this community. Cargo-culting is not a good habit to encourage in software engineering.

FWIW dates in tags are redundant because the tag itself has a time stamp. Re: environment names in tags, IMO they don't belong in the repo.

Thanks for replying.

-----

Sujan 191 days ago | link

> FWIW dates in tags are redundant because the tag itself has a time stamp.

Having them in the tagname makes it much easier and more visible.

-----

sjtgraham 191 days ago | link

Times are in the git log. Same as the commit message/tag name/etc.

-----

mynameisvlad 191 days ago | link

It's still much easier to scroll down a list of tags and find the right one by date than to look through the git log and look at both a tag name and timestamp.

-----

Dylan16807 191 days ago | link

Personally I find git log easier to handle than an enormous list of tags.

-----

Poiesis 191 days ago | link

"Good judgement comes from experience; experience comes from bad judgement."

-----

enko 191 days ago | link

  after "deploy:restart", "deploy:tag_release"

  desc 'Tag release'
  task :tag_release do
    `git checkout #{rails_env}`
    `git tag #{rails_env}_#{DateTime.now.strftime "%Y_%m_%d-%H_%M"}`
    `git push --tags`
    `git checkout master`
  end
Boom!

-----

dnr 191 days ago | link

That's not going to match the release name that capistrano chose, right? Seems like you'd want to use latest_release or something.

-----

bradleyland 191 days ago | link

We do the inverse. We tag first, then instruct Capistrano to grab the latest release (with a prompt). We have a release plan though, where software goes through QA before it's tagged. Only software ready for production gets a tag. Everything up to that point is done on a release branch.

    set :branch do
      default_tag = `git tag`.split("\n").last

      tag = Capistrano::CLI.ui.ask "Tag to deploy (make sure to push the tag first): [#{default_tag}] "
      tag = default_tag if tag.empty?
      tag
    end

-----

enko 191 days ago | link

Yeah, modify to taste. I only wanted to post some example code to show how easy it is to automate tagging.

My code won't be appropriate if you don't use master/staging/production branches, either.

-----

berto77 190 days ago | link

Just use git flow for releases. For non-trivial deploys, you may want to check out teamcity.

-----

bradleyland 191 days ago | link

> Capistrano, what a Byzantine way to deploy software...

Why would you come here to say that? Capistrano is one way to deploy software. Heroku's method is another. Neither is wrong.

This kind of thing is why author's of open source tools like Capistrano get burnt out and just want to run for the hills. Because people with no skin in the game have to come along and shoot their mouth off.

You're probably a really nice person, but when you do things like this, you hurt other people and you make yourself look like an asshole.

-----

FooBarWidget 191 days ago | link

Well-said. Heroku-style deploys are not a replacement for Capistrano-style deploys, merely an alternative. Capistrano is a much lower-level tool. I use Capistrano also for general sysadmin tasks that comprise multiple servers.

-----

conatus 191 days ago | link

Is it really Byzantine? Never ever had this thought. Once its setup, you just cap deploy - how is this much different from git push heroku? To do anything complex with PaaS stuff you still have to write code to setup the environment - likely no more than for cap.

-----

timdorr 191 days ago | link

There definitely is a product here, and it's already being built. Docker is the underlying framework for which we'll see significant improvement for deploys in the near future.

In the meantime, and if you're on AWS, check out OpsWorks. It's the cat's pajamas. It both makes much of the hassle of deploying a thing of the past, is extremely flexible, and makes it possible to have Heroku-like "git push" deploys without giving up control (or being forced into Beanstalk's opinionated ways). Amazon made a very smart purchase when they bought Scalarium.

-----

jessepollak 191 days ago | link

you don't happen to have a good online reference on Why We Tag Shit, do you?

-----

davedx 191 days ago | link

This is one of the biggest gotchas of (some of) the high productivity full stack frameworks that are out there, in my experience. I've also had issues getting Meteor deployed, and while it's in many ways a smaller, simpler beast than Rails, it has the same kind of black magic and hitting-a-wall-at-100mph deployment experience.

Both Rails and Meteor will let you develop apps at breakneck speed, with their powerful, magic cores and their excellent module ecosystems, but when you get to deploying them you'll sometimes wish you'd stayed on LAMP or (god forbid) ASP.NET. Yes, I really said that.

-----

gesman 191 days ago | link

I glad you said that. I'm seriously considering moving from RoR to ASP.NET/C# platform.

We're spending $50k-$100k/yr on Linux system administration of all the small and big moving parts that always fall apart and requires constant babysitting.

I want to give MSFT all this money and use MSVS, C#, ASP.NET and Azure for everything. I love MSVS and always loves MSVC (back in the days). I love performance of C{++|#}.

I don't feel inspired to build great SaaS solutions with shitty interpreted languages, forcing to use made-in-the-basement plugins (or gems) and all that trailing crap of sluggishness, upgrades, fixes and weird behaviors that follows.

Now you all may downvote me!

-----

robmclarty 191 days ago | link

Not exactly a product, nor wholly Capistrano-centric, but I recently put together an article on how I deploy Rails on a new VM from scratch: http://robmclarty.com/blog/how-to-deploy-a-rails-4-app-with-...

-----

forsaken 192 days ago | link

I just wanted to point out how poisonous our community is. It's something that I've been struggling with for a long time, and trying to slowly change.

The fact that people read this article, and don't feel the need to mention his fear of releasing software just shows how broken things are. It shouldn't be an accepted fact of open source that if you release new code that might be backwards incompatible, you get vitriol for it.

His quote:

... but I too cowardly to release it and make it mainstream, as Im afraid it'll destroy whatever good will for open source I have left when the flood of support questions inevitably comes in, followed by all the people who are unhappy with what I've built and feel obliged to tell me how bad I am at software.

-----

daenz 191 days ago | link

I'm the author of a popular open-source project for my programming-language-of-choice. Before I launched it ~3 years ago, I reached out to a well-known OSS guy in the community. You would probably know his name.

I wrote to him asking if he had any feedback on my project, since I'm about to release it, and because he had a similar project that didn't get much traction. He didn't reply...fair enough, I'm sure he's a very busy guy.

Fast forward a few months, I launch the project and it blows up on HN for a few days, and on twitter for a few weeks. The majority of people love it! But sifting through the feedback online, I'm shocked and disappointed to see is the very person I reached out to trashing my project publicly in comment sections and on his twitter feed. No constructive feedback, only how the project itself was a horrible idea, and the code was disgusting. I was dumbfounded...before, I wasn't worth 2 minutes to reply to in an email, but now I am worth destructive criticism on social media by the same person?

I waited a few months and sent another email asking for advice on maintaining the project. No response still. Yet every now and then, to this day, I still see backhanded comments by him about my project whenever someone mentions it to him on twitter.

Some people are toxic, petty, and childish. I don't really have a lesson from this, but that's my little story.

-----

ajsharp 191 days ago | link

Some people are just trolls, better known as haters. Don't let em get you down :)

-----

Dylan16807 191 days ago | link

...those are not the same thing.

-----

teebrz 191 days ago | link

Kudos on being a bigger person than me; I'd be tempted to name names.

-----

egonschiele 191 days ago | link

Hey, I went through the same thing! It's funny how you can get a hundred positive comments, but one snarky asshole will get you down. I usually save the positive comments in a text file and re-read them later...that makes me feel better.

-----

sliverstorm 191 days ago | link

Clearly he does it for show.

-----

pstack 191 days ago | link

I can empathize with much of what he wrote. I built a fairly popular site back in the late nineties that I only finally terminated in 2010. It had a very dedicated community of about 100,000 people and did many millions of dollars in business (not for my benefit - the service itself was free, on principle).

I spent so much of my life working on it. I wrote the software behind it, designed the presentation, handled the customer service, mediated disputes, handled the promotion, and helped with user-founded real-world gatherings built around the community on the site.

It required so much of my attention and, unfortunately, often was so hostile and venomous that the only reason I stuck with it for many of the later years was out of a sense of obligation to the community (many people made friendships through the site, met spouses, established real world businesses, and even put themselves through school thanks to the site) and a sense of obligation to myself . . . I put in all of my 20s and part of my 30s dedicated to the site and service. Hours and hours every day. I put in enough time that it was a second full time job -- not counting the $25k of cash I put in over the years.

I had real life stalkers via the site. I had harassment via my email, IM, and even via local authorities (with such a large community, there are bound to be a few crazies). Hell, even just my email inbox was depressing. For the last 3-5 years of the project, I felt sick every time I would visit my own site. Sicker when I would check my own email for it. To the point that I would go months without going to my website . . . and more without checking my email. At one point, it was so bad that my inbox had 1.1m messages (that is AFTER filtering out spam).

The only thing worse was considering shutting it down. It was a part of me. It was probably my biggest accomplishment at the time. A lot of people dream of building such a huge successful community from top to bottom with their own hands for so long, but never get anywhere close to achieving it. How could I give that up, no matter how much grief it caused me?

I'm not exactly sure what pushed me over the edge, but in 2010, I finally shuttered it. I felt bad for it. I still felt obligated to them and to myself . . . but I sensed I had to move on. And since then, I have had this great sense of relief. I have time for myself and time for other potential future projects. I am no longer forced to dismiss other opportunities, because of the obligation I had to this project. I no longer felt sick thinking of my email. I no longer felt like a prisoner. I felt like I had more control over each day of my life and what I did with it.

I have never been one of those people who sticks in a relationship just because leaving it would make all the invested time "feel like it was wasted". When a relationship goes bad, I move on and don't look back or even keep in contact. I'm good with that. This experience, though, gave me a little insight into all the people out there who have a hard time leaving relationships. Even unsatisfactory ones. Life is short and you only have so much time and energy to put into things. When you have given so much into one thing, it can feel like moving on is a bigger loss than sticking around. I totally get that, now.

But, in the end . . . it was a great choice. For him, it might also be the right choice. All of the "if only things were different" thoughts and all of the motivation to take the reign to chance those things in the community are great, but . . . ultimately can become a way of simply keeping you tied down to the very things that make you regret what you're doing. When that becomes clear, the choice to move on has to be at the forefront.

-----

kamaal 191 days ago | link

I was just wondering why did you do all that without any benefit to yourself.

I have a feeling, anything that you offer for free will be often treated as worthless. Its an problem with us humans, we attach quality with price and we think if something is expensive its of superior quality. Going down this line of argument something that comes for free is always going be treated that way.

It also gives a good indication of how a person would spend his time. If you give away your work for free, how do you expect others to pay up or value your time? And look at this way- If you put up with crap, people will assume you are perfectly OK with crap thrown at you.

Take a tough stance and never climb down from there. At times that's harsh and rude to a lot of people. But ultimately that's the only thing that protects you.

-----

snikeris 191 days ago | link

The wisdom of Harry Browne comes to mind:

http://www.goodreads.com/book/show/82104.How_I_Found_Freedom...

-----

neltnerb 192 days ago | link

I completely agree. To new hackers, I always tell them that if they post something online, they should:

1. Focus on what people they actually know and respect think vastly more than anyone they hear from online.

2. Assume that anyone criticizing their effort is an armchair hacker who just likes to be better than others. It's not always true, but is better than assuming that everyone else is better than you.

3. Always be proud of what you've done -- just because we've gone to the moon doesn't mean you shouldn't be proud of making your Arduino blink the LED finally.

I talk about it a bit near the end of this: http://blog.saikoled.com/post/62737468595/entrepreneurship-f...

-----

omn1 192 days ago | link

Point 3 really struck a chord with me.

    The greats weren't great because at birth they could paint
    The greats were great cause they paint a lot
    (Macklemore - Ten Thousand Hours)
It's the tiny steps that bring us forward. A big project starts with a single commit.

-----

pstack 191 days ago | link

Gladwell always points out the 10,000 Hour Rule, which only becomes more depressing as you age. In my mid (almost late) thirties, I now sit down and think about all the things I don't have time to become an expert in, even if I want to.

Even if I could dedicate two hours every single day of the year to becoming an expert at something, I'll be 50+ before I'm an expert in it. If I could dedicate about 15% of my waking life to becoming an expert in new things, there is only enough time in my remaining life to become an expert in two things at most. And that's assuming it doesn't take more hours or become more difficult or even impossible to become an expert in new things when you're much older. And, frankly, what's the use of becoming an expert in something in your mid 60s?! Just in time to finish the last bit of your life.

If only I'd known the value of time much earlier in life, so I could have jumpstarted that in my 30s and focused on more than one thing to become an expert in . . . you only realize that sort of thing when it is too late.

Aaaaaand now I'm bummed out. :)

-----

neltnerb 191 days ago | link

I don't think that this rule (I don't know Gladwell's version, but I hear this often in Karate) is meant to say that nothing less than 10,000 hours is worth doing.

Why do you do anything, after all? Do you have to be an expert for it to be worth doing? If this were the case, certainly no one would be a parent. It's just a guideline to keep people from claiming expertise that they don't have yet, which is often a problem with people who have been doing things for a very short time.

Or for a specific example, I've been doing karate for 10 years very seriously. Overall, I've probably spent about 4,000 hours doing karate in classes. Of that, I've spent probably about 1,200 hours teaching, which I started doing after only maybe 800 hours of training. I've trained two students from white belt to black belt, and have introduced on the order of 100 students to karate.

But I'm not an expert. According to this rule I need about another 10 years to be one. Does that mean that I don't enjoy doing it? Or that me doing it doesn't contribute to the state of the art? Hardly. Being an expert and being able to contribute are not the same. I'm not going to have karate masters coming to me for advice. But I still have made the world a better place, in a small way, for ~100 people.

My father and mother both started new careers at 40, again at 45, again at 50, and now they're both moving to new things again at 53 (they were young when I was born). Neither of them will probably be experts at what they're working on in a technical sense, but they're still making substantial contributions to the world. Heck, my dad just got his very first journal article published this year in an area that he started working in at 50!

http://america.aljazeera.com/articles/2013/8/8/study-conflic...

In the end, don't do stuff because you want recognition as an expert, do it because you care. Expertise will follow, for the things that are worth it.

-----

avenger123 191 days ago | link

I love Josh Kaufman's new book: http://first20hours.com/

I find that in some ways Gladwell's book as the opposite effect of causing me to not not even want to start something due to this "10,000" hour rule.

At the end of the day, we don't need to be an expert in most things to be proficient. Josh's book lays this out in a nice way. On a more practical level, even 1 hour a day on something has tremendous accumulative effect.

I believe the biggest gift we can give ourselves is to not lose our learning mindset. For those of us who have gone through college/university and gained the discipline to study, we tend to throw it out when we are done. In hindsight, that is the best skill that one should retain in their life. The ability to be disciplined and focus on studying/learning/doing new skills is what I am trying to continue to cultivate and I hope that when I am 50 I still have this mindset and discipline.

-----

kamaal 191 days ago | link

10,000 hour rule is only a metaphor. I think at best it should be treated as something that requires a lot of effort to master.

But its not like you go and spend 10,000 hours and at then at the 10000 hour 1 second you become an expert.

If you are deeply involved in something working day and night. Within an year, you will be close enough to swimming with experts. Often that is all you need.

-----

forsaken 191 days ago | link

It makes me sad that interacting with a community has to come with disclaimers :x

-----

avenger123 192 days ago | link

I can't comment on the poisonous nature of the community but what I have noticed is that at some point its taken for granted that the open source solution will be very stable and solid.

It seems (and this is just entirely my opinion) that it is forgotten that people are doing this out of their own goodwill and are not necessarily being paid for it and really have no contractual obligation to keep doing what they are doing.

It's almost the worst of both worlds. You get all the responsibility for having your open source project be considered at the same level as a commercial solution but without it actually being a commercial solution.

-----

crucialfelix 191 days ago | link

I think one contributing factor is that discernment, critical thinking, and even applied pessimism are all good qualities for a programmer. Many of us get grumpy because we are on high alert for such extended periods. We are looking for bugs and issues. We are objecting to proposals, finding fault, raising negative points. It's a critical mode of thinking, so we accept being critical. Or grumpy.

So when some other human is the source of the bug or blocking issue then we don't take care to be social and delicate. That's broken, that's badly built, hey that sucks. Or just channeling other pent up annoyances onto whoever is around.

-----

leoh 192 days ago | link

> I just wanted to point out how poisonous our community is. It's something that I've been struggling with for a long time, and trying to slowly change (from inside the python community).

Do you mean to say that the Python community is poisonous? Or that the Ruby community is poisonous from the perspective of a Python community member?

-----

avenger123 192 days ago | link

I didn't put too much weight on whether it was Python or Ruby. I felt it was a statement about the whole open source community rather than a particular group.

-----

forsaken 192 days ago | link

Yea, that. The python bit was just a side note.

I went ahead and removed the python part, as it didn't really contribute to the message.

-----

pmorici 192 days ago | link

I don't understand why he or anyone for that matter would care what other people think if they can't articulate it in a civilized manner. Nasty emails is what the delete button was made for.

-----

protomyth 192 days ago | link

Its a cumulative effect, the individual e-mails can be laughed off, but you are spending the energy to hit delete. Its e-mail without a spam filter of any sort. Its not the first e-mail that will get you, its the thousandth. No one survives being told they suck thousands of times unless they build a hell of a attitude and we get projects that are "mean to newbies". A lot of legitimate newbe questions are indistinguishable from the opening volley of a troll.

-----

neltnerb 192 days ago | link

I can totally understand why someone would still be emotionally drained from receiving lots of criticism, whether they intellectually know it's silly or not. It's hard to have the self-confidence and restraint to maintain a good attitude when you're surrounded by criticism.

-----

a3n 191 days ago | link

We're social animals and we care what others think, at the DNA level. We're also evolved, and we can recognize what should be paid attention and what should not. But we can't entirely escape our DNA, and we vary from individual to individual on how far we can each escape. We're not code, we're wolves.

-----

pstack 191 days ago | link

You can dismiss the infrequent and brief squealing in your ears, but once it becomes tinnitus, the incessant, constant high pitched tone makes it impossible to focus on anything.

-----

wging 191 days ago | link

I thought the Ruby community was supposed to be nice? MINISWAN and all that?

-----

nevinera 191 days ago | link

Definitely! But the rails community prefers DHHIADSWAD, and I'll let you guess what the letters mean.

-----

rurounijones 191 days ago | link

MINSWAN, you had an Extra I :p

In case anyone doesn't know it.

"Matz Is Nice So We Are nice." (Matz being the creator of Ruby and generally nice guy.)

-----

wging 191 days ago | link

I guess I wanted it to be Matz Is NIce So We Are Nice because it's more pronounceable.

-----

regularfry 191 days ago | link

Matz Is Nice And So We Are Nice.

-----

damncabbage 191 days ago | link

It's "Matz Is Nice And So We Are Nice", because MINASWAN is a joke on the Japanese word for "everyone" (minasan). The -swan is like a super-cutesy suffix honorific thing.

... And yeah, it sucks that it feels like it's died a bit. But keep it up anyway; https://twitter.com/tenderlove is a great example to follow. :)

-----

api 192 days ago | link

I released something huge a while back:

https://github.com/zerotier/ZeroTierOne

I got some good feedback, but more than my fair share of "this is the stupidest fucking idea I've ever heard of" and such. Luckily I know to ignore pretty much all that shit.

I'm gonna tell it like it is:

There are a lot of people in tech who don't have great social skills. They're awkward, feel withdrawn, and have trouble dealing with other people generally.

One quick and easy solution some of them hit upon is to just be an asshole. If you're an asshole, people sort of sometimes defer to you or steer clear of you. It creates the illusion of power and influence while shielding a person from having to do any real work to improve themselves in that area.

If you think it's bad online and with OSS projects, try delving into the meat-space startup scene itself.

-----

pekk 191 days ago | link

In my opinion, it's ridiculous to excuse people somehow on the basis that they don't have great social skills. Maybe that was the problem in the 90s. That really has nothing to do with it today. There are a lot of people in this scene who have plenty of social skills, they just choose to act like raging assholes. Some fraternity brother type in the startup scene is not necessarily any better than a nerd in this regard.

-----

bphogan 191 days ago | link

You can disagree if you want, but I think that someone who chooses to act like a raging asshole has a definite lack of social skills.

I'm sick of these two types of assholes, really. The first type is the "I'm an asshole online -- it's my persona. "

The other is the hater / troll.

And I just have to think that both of those kinds of assholes result from a lack of social skills - as in, "I don't know how to get along with other people in society."

Damnit, I just want to code cool stuff and use other people's cool stuff. Can't we all just write cool stuff and help each other out?

-----

LaGrange 191 days ago | link

I have little social skills, anxiety etc. I can't afford to be an asshole, in fact, it's quite risky for me to take a stand even when I think I should. Someone who is consistently a jerk to others and yet has a good job is unlikely to have low social skills.

-----

api 191 days ago | link

Look closely. In many cases they don't actually have good social skills. That's the thing about being an asshole. It covers that up. Blind raging assertiveness is not good social skills anymore than banging on something really hard is craftsmanship.

-----

bretthopper 192 days ago | link

Some unsolicited advice from someone who's never run an open source project as popular as Capistrano:

* Ditch v2 ASAP (seems like you've already decided on this). It's pretty obvious you aren't motivated to work on that codebase anymore. I've looked at v3 and it's much better thanks to relying on Rake tasks.

* Be selfish. It's your project so if you think v3 is the way to go forward, go with it and who cares what the "community" thinks.

* Seems like you already have a few people helping out, so continue and maybe make formal "core" team. There's nothing with yourself taking a step back from the heavy coding. But I believe that Capistrano would be better with your guidance than without it.

codebeaker: There was no mention of Harrow in that post. Are you still working on that? I'd assume that if you were you'd continue work on Capistrano since it's based on it.

-----

smacktoward 192 days ago | link

> Be selfish. It's your project so if you think v3 is the way to go forward, go with it and who cares what the "community" thinks.

Or call the community's bluff. "I think v3 is the way forward, so that's what I'm going to be working on. If you want to stick with v2, you maintain it."

-----

FooBarWidget 191 days ago | link

And then prepare to be getting accused of elitism, being selfish, not caring about users, crippling their system, etc. For a good example, see how people treat Lennart (author of systemd).

-----

desas 191 days ago | link

and the author of pulseaudio and avahi. He's taken a lot of abuse over the years.

-----

mkmkmmmmm 191 days ago | link

There's a great Japanese term, omakase, it means "fuck the community I'll do what I like".

-----

sliverstorm 191 days ago | link

Seriously. It's open source, that's what open source is for.

-----

codebeaker 192 days ago | link

Regarding Harrow [1] bretthopper, I absolutely am, and this is where I want to focus my work, and to be able to build a company around deployment best practices and Capistrano.

Regardless of frameworks, and of technologies and platforms, I believe if I can take the load off myself with Capistrano, by turning it into the open source component of a best-practice company, and build teams of passionate, skilled support engineers, then I'll be where I want to be.

Unfortunatley Harrow would suffer if I give up on Capistrano, as part of the promise of Harrow as a SaaS is that it's all guaranteed to stay compatible, and work as we've all come to expect, just with improved workflow, etc...

([1] http://www.harrow.io, please excuse the missing graphic placeholder I've not updated the landing page in some time as I've been focusing on building the product, and the landing page performs really well without that graphic in place)

-----

diminish 192 days ago | link

Lee, why not try the sidekiq way? A capistrano pro, and a hosted managed version or maintenance fee...

-----

canes123456 192 days ago | link

Also, charge for support. List supported platforms and charge for support for strange configurations.

-----

More



Lists | RSS | Bookmarklet | Guidelines | FAQ | DMCA | News News | Feature Requests | Bugs | Y Combinator | Apply | Library

Search: