I Can't Stop Winning - <AUTHOR> https://blog.pinboard.in/2019/07/i_cant_stop_winning/ <comment><USER2> As far as I'm concerned, Pinboard is the most reasonably managed digital product I pay for. No feature creep, no bloat, no overthinking it.

While Maciej notes accurately that death comes for us all, he's already outlasted the theoretically more powerful competitor that was Delicious.

I would say "I'm excited to see what's next for Pinboard," but I suspect the future is all it needs to be: The service will continue to function as designed, and that's all I really need.

<comment><USER3> If I use Chrome and the sync of bookmarks for that, across devices, why would I use Pinboard?

All these comments have me wanting to try it, but I'm not sure what I get over what I have. Thanks.

<comment><USER4> First, you rid yourself of the Google Overlord that is tracking any and all input from its user — You! On a more serious note, Pinboard can be incorporated into so many different services, even his competitors. Do you use Instapaper? Pinboard will sync everything you saved so you don't have to worry about losing it after reading it. Same with Pocket. Or it'll automatically grab embedded links from Twitter posts you "liked." He makes it easy for you in import all of your Google bookmarks if you export them to HTML.

His API is a modified version of Delicious.

You have a built in Notes path that can also store (x) amount of notes.

Your account is as public or private you want it to be. You can make all bookmarks and user page private by default, or you can alter which tags you want to be public, etc. Best of all, nobody is tracking you. You can be an invisible user with a backlog of bookmarks spanning years and you will _always_ have access to them.

Quick disclaimer: I've been using Pinboard since 2013-2014, before the new subscription model, and am fortunate enough to have paid an onetime-fee.

<comment><USER5> Don't forget search...

</comment></comment></comment></comment><comment><USER6> > What does the future hold for Pinboard? Death! The bus that one day comes > for us all! The skeletal, icy hand on an unprepared shoulder! Pain, a flash > of light, then numbing darkness. So back up your bookmarks.

I love this sentence, and the spirit of it.

<comment><USER7> Yes, it's that slavic pessimism combined with Gen-X fatalism that really gets me.

</comment></comment><comment><USER8> Some quotes from his website which is, by the way, deliciously non Javascript garbagy

"The site is reliable. Outages are rare and brief. The site has servers in San Jose and Sacramento, for better resiliency in case of a California earthquake."

Front page review: "One dude in his underpants somewhere who has five windows open to terminal servers."

"The site has a sane business model that would be familiar to your grandparents."

"As every year, I'd like to thank all Pinboard users, old and new, for their support and their custom. I know there are lots of rival bookmarking services out there.

I will consume them, one by one, like I consumed the pie."

Can't really overstate the coolness of this dude

<comment><USER9> He's also a great follow on twitter

<comment><USER10> The funniest thing I remember was him talking about how upset Germans got when he said he didn't do invoices. If they persisted, he'd send a blank invoice with instructions to just fill it out however they wanted, which just made them even madder.

<comment><USER11> the tax offices here require invoices. i personally don't care at all but unfortunately i do need to pay taxes.

<comment><USER12> This is how the rich and poor are segregated in Germany. The system is to take too much from you, and let you reclaim that, theoretically once you've proven that you had tax-deductible expenses.

But it's enough to just "talk" to the "Finanzamt" to already get a baseline €1000 tax-deductible expense, without even needing to show them anything. Which makes me wonder, why not just deduct this from all income taxes, if you're willing to grant it to everyone, without any proof.

Sorry for sounding cynical now, but "dumb" and "busy" people are naturally disadvantaged from this system. That's not exactly... helping anyone. Except those who profit from the motto "A sucker born every minute!". But even they'd have more advantages, if their "suckers" had more cash at their disposal...

<comment><USER13> Australia has the same system. They'll give you $1000 without proof. I worked out that it's utterly pointless hoarding receipts and doing all the paperwork, because the difference between what I could claim with paperwork and without paperwork is maybe a couple hundred bucks. Not worth the effort.

<comment><USER14> And yet my partner got $7k back this financial year. It's certainly not as simple as all that. I'll be getting a decently large sum, though that's because of a mistake I made!

<comment><USER13> nice :) I'm not saying it's not possible, and sometimes beneficial. But for me, it wasn't worth it.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER15> _> A one-person business is an exercise in long-term anxiety management, so I would say if you are already an anxious person, go ahead and start a business. You're not going to feel any worse._

+1

<comment><USER16> Not to pitch in with low-value "me too thanks" style replies, but by god does this sum up the last 18 months of my life. Every time I feel comfortable, bam! Something new to keep me awake at night. It's one part exhausting and one part exhilarating and I'm not sure if I could go back to salaried work at this point.

<comment><USER17> > I'm not sure if I could go back to salaried work at this point.

I hope it's a choice!

I applied for a salaried position at IBM (I think?) for a Product Management position that I could have nailed, through a head-hunter that I knew was covering the position.

He said: "No way, dude. I wouldn't do that to them or you".

I said: "Why not?"

He said: "Because you are a startup guy".

I said: "Hey - I used to work at Motorola. At the global level. Scotland, Malaysia, I lived in Japan, Phoenix and Austin. I was a great corporate droid."

He said: "Used to be. Now you would just get a couple of paychecks into feeling less homeless-bound, and tell your boss or your boss's boss to fuck off and die."

I said: "No I wouldn't".

He said: "Yes you would - and you can't change my mind".

Whatever.

In my town, I am apparently branded "a startup guy".

<comment><USER18> Dude, I think the headhunter may be right. Just imagine when (and this is a when not an if) you are demanded to do an insanely stupid thing which you, your team, and your customers hate. It makes no sense but must be done asap. When you ask for justification, it's because the VP, who never leaves his office except for extra long work lunches with the other executive staff, said it must be done. No logic, no reasoning, no arguing - just get it done. You have two choices:

1) Eat shit and do the stupid thing while a small part of you dies.

2) March into the VP's office, tell him to fuck off, and walk out like a champ.

Which option do you choose?

<comment><USER17> Ha! I remember a meeting at Intel, Scottsdale, I think, with their old x386+DRM/crypto-coprocessor chip, where one of the directors (VPs?) got up and stood on the conference table, and urinated on the stupid proposal.

It was very rude but pretty declarative!

In any case - I would never have the moral rectitude to make that kind of statement.

<comment><USER19> I certainly wouldn't be making a statement in that particular way. But it's impossible to misinterpret, that's certainly true.

</comment></comment></comment></comment></comment></comment><comment><USER20> The author is really good at writing. I read the article about December 2010 and found it equally funny and well-written as today's article. [https://blog.pinboard.in/2011/03/anatomy_of_a_crushing/](https://blog.pinboard.in/2011/03/anatomy_of_a_crushing/)

<comment><USER21> Yup; I get a strong very "P. G. Wodehouse" vibe from his writing.

EDIT: After looking at his resume, I'm fairly confident his writing style is heavily inspired by Wodehouse (he mentions about Jeeves and Wooster!).

<comment><USER22> Yes, and there are also hints of P.J. O'Rourke, I think, or perhaps a smidgen of more lighthearted Hunter Thompson.

</comment></comment></comment><comment><USER23> I am glad to see him write that he is trying to win back customers. I use pinboard a lot and was worried it was going down when a post appeared here saying that parts of pinboard weren't working and the owner wasn't responding [https://news.ycombinator.com/item?id=18749330](https://news.ycombinator.com/item?id=18749330)

<comment><USER24> Parts of Pinboard now are working!

<comment><USER25> Back when archiving was getting pretty slow / iffy my plan, which I never put in place, was to simply buy another archiving account every month until the weight of either money or guilt simply overcame whatever obstacle was keeping it from working.

Many thanks for all the hard work you put in to the "other" activities you were involved in. Like, really. Thank you.

</comment></comment></comment><comment><USER26> The gentleman has all the "cool" cred covered: [https://idlewords.com/2016/05/shuffleboard_at_mcmurdo.htm](https://idlewords.com/2016/05/shuffleboard_at_mcmurdo.htm)

(I've been following his blog for ~12 years now, ever since I first read this one: [https://idlewords.com/2007/04/the_alameda_weehawken_burrito_...](https://idlewords.com/2007/04/the_alameda_weehawken_burrito_tunnel.htm) )

<comment><USER27> Just clarifying, by 'follow' do you mean a manual poll by refreshing the home page? I don't even see an RSS feed... and he has no personal Twitter account, I don't know if @Pinboard is the a/c to follow (I don't want the site news, I just think his personal views are cool and his writing is extremely funny).

<comment><USER28> [https://idlewords.com/index.xml](https://idlewords.com/index.xml) is the RSS feed

<comment><USER26> Feedly managed to find that for me. Works fine.

</comment></comment></comment></comment><comment><USER29> I continue to love Pinboard. I run a linkblog through it; it's not so much bookmarks for me as a small link-focussed blog. The HTML view (Pinboard's own) is ugly, but it works great in an RSS reader or as a Twitter / Mastodon account fed from the RSS.

It's so nice to have a simple, reliable service. I got a little cranky when the various Pinboard APIs started suffering some scaling problems, I think during the hiatus Maciej mentions as he was busy trying to save America. That's OK, we survived, although jury is still out on whether America will.

<comment><USER30> I would be interested to learn more about how you run a linkblog using Pinboard.

</comment></comment><comment><USER31> Man it's so great to see sites like this continue to thrive.

At the same time, I am once again amazed at how little revenue a publicly touted successful project makes.

<comment><USER32> $200k/y. One developer? Digital nomad friendly? Freedom from the pointy haireds? No real need to do 40h/ week? I think that is damn fantastic revenue.

<comment><USER31> Oh I'm not disputing it's good for a single developer along with the freedom.

It's just that these projects always get talked up as huge successful life changing products (like Bingo Card Creator and appointment reminders etc) and then have really small revenue numbers attached to them.

Don't get me wrong, kudos to the developers for building something people love and that give them the lifestyle they want.

I just think these projects are often overhyped to seem more than what they actually are: lifestyle projects.

<comment><USER24> I mean, they are life-changing projects. This is not my lifestyle, but my life. What more do you want?

<comment><USER33> Frankly, if you don't have a bespoke Pagani Zonda with your initials in the model name, we're collectively unsure that your lifestyle has enough style or enough life. Thinking it over, I might not even invite you to my birthday party.

</comment></comment></comment></comment></comment><comment><USER34> > What does the future hold for Pinboard? Death! The bus that one day comes > for us all! The skeletal, icy hand on an unprepared shoulder! Pain, a flash > of light, then numbing darkness. So back up your bookmarks.

Is he shutting saying he's shutting it down, or just saying that's the future eventually?

<comment><USER35> Its a service ran by a single person. He croaks and its gone with no warning.

You should anticipate that as how your relationship with any non-big name service you use will end because that's how it will. It just won't be working one day, then the next. You'll hit the internet to find that the person running it died a month ago and the business with them.

<comment><USER24> I agree, with the caveat that the same holds for big-name services. It's only the mode of death that's different (bus accident vs. "our incredible journey" blog post).

<comment><USER35> In my experience the big names tend to give a warning but i agree that its best to plan for instant death in that case as well.

<comment><USER36> He just gave you that warning.

</comment></comment></comment></comment></comment><comment><USER37> > A one-person business is an exercise in long-term anxiety management, so I > would say if you are already an anxious person, go ahead and start a > business. You're not going to feel any worse. You've already got the main > skill set of staying up and worrying, so you might as well make some money.

This hits very close to home, guess I might as well embrace it! I'd probably be just as anxious at a normal job anyway and am determined to figure out anxiety management.

<comment><USER38> If you do, please let me know :)

<comment><USER37> One thing that helped me recently - I realized that my work is not a reflection on my value as a human being.

I grew up in a semistrict religious context, and regardless of whether it was intended, I internalized that everything I did was a reflection of my righteousness and value as a human and even to a degree my worthiness to be accepted into heaven.

I've since stopped practicing that kind of religion, but I realized I have still been treating say my freelance work as a _moral_ question - if I do it right, I am good, if I mess up, or take too long, or there are bugs, my emotions still process that as if my eternal soul is at stake. Leading to, procrastination, stress, and withdrawing from communication because I'm afraid of punishment.

I had some really good conversations with clients lately, just being upfront about my fears of blowing timelines and admitting to withdrawing, and they were very understanding and to hear them acknowledge that this stuff is hard and that I was doing a good job was massively motivating.

Hopefully most people don't have this issue, but if you do, it was very relieving to even just realize this is what I was doing, and am working with a really good therapist and a business coach to process and work through it, and I'm already seeing a lot less stress as a result.

</comment></comment></comment><comment><USER39> Who remembers hacky, plastic lawn chair, Mac mini-era, old-school del.icio.us? Those were the days:

[https://live.staticflickr.com/8/10416310_7dabcdc326_b.jpg](https://live.staticflickr.com/8/10416310_7dabcdc326_b.jpg)

<comment><USER40> Aerons were deliberately shoved out of frame for that. The days change less than one might suspect.

</comment></comment><comment><USER41> "That is because I spent all of 2017 doing tech organizing, and then all of 2018 fundraising for the Congressional elections, and customers grew irate"

Oh yes. I was so close to giving up on Pinboard and hosting my bookmarks myself. Badly, probably.

I hope he doesn't find another hobby that is taking exactly 100% of his time.

Since a few months everything is back to normal, and that is great. But this episode showed the transience of things.

</comment><comment><USER42> Great blog!

For anyone using Pinboard, Why would I use it instead of pocket?

I have been using pocket for a while and the overall feature set and mobile/browser support is great.

<comment><USER43> Check out [https://pinboard.in/tour/](https://pinboard.in/tour/). Pinboard's feature set is more geared towards bookmark management which happens to have a read later integration. It's quite different than Pocket.

</comment></comment><comment><USER44> I have a lifetime account that I don't have any ongoing payments for. And now I feel a bit guilty.

<comment><USER39> I do too, but as an early adopter (long before the Delicious "sunset" fiasco), I did quite a bit of evangelizing for Pinboard. I'd like to think that some people signed up for paid accounts because of me, but I have no way of knowing.

</comment></comment><comment><USER45> >>> one-person business is an exercise in long-term anxiety management, so I would say if you are already an anxious person, go ahead and start a business. You're not going to feel any worse. You've already got the main skill set of staying up and worrying, so you might as well make some money

Love it :-)

</comment><comment><USER46> "you have to help your fate along"

Good old grandfatherknowledge. Reminded me of, "the gods help those, who help themself".

Usually nice things do not get presented on a silver plate to you. You have to act.

</comment><comment><USER47> "Nine Fives Software"

I feel that.

</comment><comment><USER48> I have been a Pinboard user since 2010. In fact, I got in at some point where the service offered free service forever. Thank you. I'm also a contributor to the drop in active users. I stopped using it for several years. Don't know why. Started using on a daily basis in the last year. Feel like I still don't use it nearly to my full benefit. Simple. Does basically one thing. For a service to be pretty close to perfect, it has to be simple.

</comment><comment><USER49> I find it funny that the number of tags per bookmark has been falling. I've also increasingly given up tagging things in favor of relying on global search.

</comment><comment><USER50> I'm Jonathan, founder of PageDash, a Pinboard alternative.

If you are looking for a Pinboard alternative, do try out [https://www.PageDash.com](https://www.PageDash.com) (free tier of 30MB/month storage). Essentially, PageDash archives full pages for $29/year. We have been in business since 2017. Open to feedback. Thanks!

<comment><USER24> My feedback is I will crush you.

</comment></comment><comment><USER51> Pinboard is such an inspiration to my (one-person) entrepreneur journey!

</comment><comment><USER52> Thank you for you work and please avoid those buses.

signed, an anxious customer

</comment><comment><USER53> I didn't realize Pinboard is only 10 years old. It feels like it's been around forever.

<comment><USER24> Well, at its inception it was a retro reboot of 2003-era delicious, so at no point did it feel new and fresh to anyone.

<comment><USER54> What with the Botoșani reference, what were you doing in Romania?

<comment><USER24> My girlfriend was in the Peace Corps and I was freeloading.

<comment><USER54> Ah, thought for a moment you have relatives there or something. Was born nearby (Iași) and have good friends/college mates from Botoșani.

Ever thought about leveraging your skills/instincts/fame for much bigger impact other than through politics ;) ;) ? I'm in Seattle tired of big corp, cooking up with other ex-pat Romanians a service to disrupt the traditional ad model while preserving privacy and data ownership. Email is in my profile if at all interested.

<comment><USER36> LOL, that gave me a laugh. Thank you for the entertainment.

<comment><USER54> Care to share what you found so funny?

<comment><USER36> Well, first I almost got a bingo for 'leverage', 'impact' and 'disrupt'. And then I realised you asked _idlewords_ to join you in _ad_ business. That's just funny.

<comment><USER54> Didn't intend it to be funny but good for you.

Hating ads is misguided. Ads aren't going anywhere and network effects keep users and advertisers coming to Facebook and Google. The solution we see is going after the ad money with a different business model and use cases that give users control over their personal data while serving advertisers needs. That is disruption and idlewords could leverage sorry use his success and relative fame to more impact sorry effect on changing the status quo.

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER49> I subscribe to the blog via RSS, but it no longer updates with new posts it seems.

</comment><comment><USER55> This community is so toxic!

One minute something doesn't look "awesome" so it's shite, next minute something looks "plain jane" and it's amazing.

Seriously guys, if this site was launched today it would be ripped to shreds, but it isn't, obviously because it does it's job, and is well known on HN, but if someone was to launch a bookmarking service with no react this and javascript that, it would be shot down so hard.

Fuck this, so many ideas people have but don't want to progress because of Silicocks.

P.S. I'm a paid member, and it's awesome!

</comment><comment><USER56> I use it casually. I got one of the "lifetime" accounts so it doesn't cost me anything and I put the odd bookmark into it. Best tool for the cost. I wasn't really sure about recommending it to other people though since it felt like it was being neglected (I have a pet bug on the site that is 2 years old - probably a wontfix ). Feels better that he's giving it a bit more love.

I used to follow him on twitter but I get enough US politics already without following somebody who tweets about it 24x7.

</comment><comment><USER57> I would love to read a book or longer-form content written by this author. His writing is just really funny, while also being sort of philosophical and semi- informative. Love it.

<comment><USER58> You're in luck: [https://idlewords.com](https://idlewords.com)

</comment></comment><comment><USER59> There are many wise quotes in that post, but this is my favourite.

> My grandpa sometimes said "you have to help your fate along".

</comment><comment><USER60> I use pinboard daily, not so much to save bookmarks but to browse new content. I wrote a small hacky script to filter out links on "recent" page with more than X amount of other users that have it bookmarked too. It's not all new content but if people are bookmarking it, it must be at least worth a look.

</comment><comment><USER61> I loved Pinboard when I was using it, but my biggest pain point was the lack of a decent Android app. It was cumbersome to get websites from my phone's browser into Pinboard. I'd easily pay $2/month for a polished, modern Android Pinboard client.

<comment><USER62> I've been happy with PinDroid. It adds Pinboard as a share target, so you can bookmark things from any app with a share menu (including your browser, obviously).

[https://play.google.com/store/apps/details?id=com.pindroid](https://play.google.com/store/apps/details?id=com.pindroid)

<comment><USER61> I was specifically thinking about Pindroid actually! It hasn't been updated in over two years. I had some weird issues where the back button of the share intent wouldn't correctly return me to the app I was sharing from, instead bringing me to my bookmarks. There were a few other little small things, but the fact that it's not being maintained anymore doesn't give me hope it'll ever be fixed.

<comment><USER62> Not sure how it would fit in your workflow, but you can avoid that back-button bug by using the "read later" share intent (it's the pin with a white background instead of blue). With that one you get a toast message saying the bookmark has been added but you never leave the original app.

That does mean you don't get to add tags at that time, though.

</comment></comment></comment></comment><comment><USER63> Try [https://fastbmk.com/](https://fastbmk.com/)

It's a free alternative :)

</comment><comment><USER64> > business is an exercise in long-term anxiety management, so I would say if > you are already an anxious person, go ahead and start a business. You're not > going to feel any worse. You've already got the main skill set of staying up > and worrying, so you might as well make some money.

Never thought about this that way!

</comment><comment><USER65> Hey Maciej <3

Why did revenue go down? Think it'll go back to growing in 2020?

<comment><USER66> it does not look like revenue is going down. he has made 222 in 2019 while we're still 6 months from the end of the year.

<comment><USER24> No, the revenue is for the completed preceding year.</comment></comment></comment>


Improving autonomy - <AUTHOR> http://www.improving-autonomy.org <comment><AUTHOR> I think we don't have enough people trying to improve human's autonomy, that is their ability to do something by themselves (or in smaller groups). I'm trying to build a community around this and this is an something I'd like feedback on</comment>


How to Make an Impact During the First Month of Your Startup Job - <AUTHOR> http://estromberg.com/post/13592135871/how-to-make-an-impact-during-the-first-month-of-your

<comment><USER2> I just started at my first startup job a few months ago, and agree with a lot of the sentiment in this post.

The biggest difference I have noticed: at most companies, a new employee is a body to get done the same work, in the same way, as somebody else. You are defined by how well you execute an already-constructed set of tasks and goals.

At a startup, you are valuable if you add a whole new set of opinions and skills to the team. If you come in and just do what you're asked, even if you do it well, you probably aren't doing very well. You should notice things about the business that are not optimal, blind-spots that the previous employees hadn't thought about, easy ways to save or make lots of money, even though these things aren't part of your formal job description.

<comment><USER3> I disagree a little here. Taking on extra projects and solving problems outside of your remit is certainly great. However, you must also take the time to do the job for which you were hired - very well.

Your X factor value is important but don't leave the company with a hole you were brought in to fill.

</comment></comment><comment><USER4> I'm just going to throw this out there, but I think this list is BS. There's really only two bullet points you need:

1\. Get things done.

2\. Make sure people _know_ you're getting things done.

...and not necessarily in that order either. Being labeled "impractical" is the kiss of death in a startup.

Do those things, and most successful startups won't care about the other bullet points.

<comment><USER5> I appreciate a new employee making suggestions as to how we can streamline processes, make documentation better, get up later and do the same amount of work.. don't underestimate how valuable it is to have a fresh pair of eyes.

<comment><USER4> I would argue that they fall under "getting things done". Because they _do_ help people get things done, right? :-)

<comment><USER6> I guess you can either have two bullet points and elaborate them quite a bit (because not everything is obvious to everyone) or just make more bullet points like the original. :)

<comment><USER4> Ask and you shall receive: <http://jasonmbaker.com/get-results>

...although this probably isn't a _ton_ better. :-)

<comment><USER5> I do disagree with your 'you can be an asshole %X more if you are getting results'. In fact I would consider being an asshole indicative of not getting results as it can alienate your co-workers (and boss!).

</comment></comment></comment></comment></comment></comment><comment><USER7> I saw something great in some Seth Godin piece. If your boss (or team) doesn't yet trust you to do big, impactful things, take on other projects to earn their trust. The breakthrough idea was that they don't have to be product projects. Just organizing lunch, a team build, software purchase, etc. can be enough. As a coder, those seem trivial but to a non-coder they're just as big and important a task.

</comment><comment><USER8> There's another side to being optimistic that's extremely important when you're proposing an idea. I don't mean assuming every new idea is great or that every proposal will work out exactly as planned; that's obviously a recipe for disaster. In my experience, any sufficiently technical person will already have an opinion on whether or not some proposal works by the instant someone finishes explaining his or her big new idea. A lot of times, these opinions will be correct. However, often these opinions will be based on assumptions from situations in the past that were similar in some way but aren't necessarily important now.

As someone proposing a new idea, you should find out what the assumptions behind these objections are and why they're considered relevant now. Make someone explain the fundamentals of why something won't work instead of immediately walking away and telling yourself, "oh, someone objected, clearly they know more than I do and this idea will never be good."

Getting into the habit of identifying your assumptions and challenging them also helps you keep a more objective viewpoint over time by helping you to understand accepted wisdom instead of simply parroting it.

</comment><comment><USER9> This post couldn't have come at a better time for me. While I'm not exactly working for a start-up--I'm working for a large publisher whose latest publication is almost two years old--a lot of this advice still applies. The biggest bullet point there for me is taking ownership, because it's true that things sometimes won't ever get done unless you do it yourself.

</comment><comment><USER10> I would add to the list finding a big security hole or other risk and fixing it.

I joined an e-commerce team at a major systems integrator and discovered they had left the default password in place for the administrative interface of their flagship implementation.

It was actually possible to delete the entire product database using the website. I changed the password immediately, of course.

</comment><comment><USER11> I get the idea that these things - thing actually - it is also called initiative - really can be said about any fairly flexible job and position.

I know a carpenter who is looking for the same thing when he hires or subcontracts.</comment>


Show HN: Vim-zen – Barebones vim plugin manager w/ multithreading. - <AUTHOR> https://github.com/prakashdanish/vim-zen <comment><AUTHOR> A lot of people are asking why how is this different from vim-plug. Well, I never came around to use features offered by vim-plug other than install, update & remove. So I wrote this nifty yet functional plugin manager with multithreading support for vim8/nvim.</comment>


The STEM Crisis is a Myth - <AUTHOR> http://spectrum.ieee.org/at-work/education/the-stem-crisis-is-a-myth <comment><USER2> "Wages for technologists have not increased" is often evidenced by claims about averages. By the same token, one could argue persuasively that devs do not age, because a year goes by and they get a few months younger.

The explanation is that the number of devs (and many related trades) is increasing rapidly, largely driven by hires of young neophytes rather than retraining of e.g. 50 year old lawyers. The neophytes are younger and have lower wages than the mean dev. This brings the average down faster than raises and aging bring the average up.

You can verify this if you look at data for particular career cohorts, either people or experience levels. In the 4 years I've been on HN the quotes I hear for "generic CS undergrad from Stanford" are up more than 25% (80k to 110k or so, starting salary offer). Companies that I work with complain bitterly that their competitors are bidding irresponsibly. The going wages _for interns_ are substantially in excess of what I expected to earn in mid career when I graduate not even 10 years ago.

Also, anecdotally, of the couple hundred people whose professional statuses I'm routinely exposed to I don't think I've ever heard "Boo, got to take a pay cut" except for making the BigCo to startup or self-employment transition.

<comment><USER3> It sounds to me as if you are saying average wages are not increasing because of the influx of young developers. Isn't that exactly the point the article makes, that the non-increasing wages indicate that there is no shortage of tech workers?

It also seems unlikely that the decreasing averages don't affect the wages of older tech workers. They compete with the young, cheap tech workers after all - why should companies continue to pay high salaries to old tech workers if they could replace them with cheap young tech workers?

<comment><USER4> _why should companies continue to pay high salaries to old tech workers if they could replace them with cheap young tech workers?_

Because young workers are not a substitute for old workers.

You could argue that _four_ fresh graduates are a substitute for a single good senior dev, but in many cases even that is not true. Thus, old guys continue to find good jobs for good money.

This worry is as old as software. The cheap hordes will replace you. It used to be cheap hordes from overseas, and now it's cheap hordes fresh out of school. They're on there way. But somehow they never seem to arrive.

<comment><USER5> _They 're on there way. But somehow they never seem to arrive._

I wonder if that's because the demand keeps increasing. Software is eating the world. Sure, supply is increasing from overseas, and young people, but demand is growing more.

</comment></comment></comment></comment><comment><USER6> My experience is that it's very hard to find good developers, or university graduates who want to become developers.

The CS grads that I've interviewed fall into three groups:

1) They were good at Math, spent 4 years avoiding anything involving computers, and whose career goal is to find a cushy middle-management job.

2) Arrogant CV-fillers who think that their HTML/JS 'skillz' make them them God's gift to the world. Who then end up working for Big Consultancy Firm working on Sharepoint (because the money is good).

3) The rare gem, who love computers, love coding, and get usually get snapped up instantly by Google/Microsoft.

As someone who doesn't have a degree, I find the level of CS graduates from (top!) universities disheartening. I've seen people who couldn't implement a simple sorting algorithm in pseudo-code (or even explain how they'd do it!).

Things I can do with my eyes closed; you know, because I have actually read my algorithms book cover-to-cover.

The cause is clear: developers can earn very good money at the moment. It's a good career move. So it's attracting the lazy chancers who just see the $$$$$.

What ever happened to pursing a career doing something because you, you know, love doing it?

<comment><USER7> There are things from a formal CS background I wish more people mastered. Things like understanding how JOINs work, basics of memory management and understanding that two nested for loops is likely to be worse than a single one, even in the cloud. But knowing how to implement a specific sort isn't one of these. It's simply never come up outside of an exam.

<comment><USER8> I'm shocked that a proper CS course _wouldn 't_ teach them. We covered Joins (and the relational maths behind them) in first year, and "nested for loops being bad" would be a necessary by-product of learning _anything_ about complexity.

<comment><USER7> Oh, I don't mean to say these aren't taught (though being taught something and mastering it isn't quite the same).

What I mean is that those are the parts of a CS background that have actually been useful in my everyday coding life, and that I would expect from candidates I interview. To be opposed to knowledge/implementation of different types of sorts, which is also a part of a CS background, but has low practical use in my everyday coding.

<comment><USER9> > _the parts of a CS background that have actually been useful in my everyday > coding life_

Someone fresh out of school would have _no idea_ how to discern that from anything else in the wide, wide world of CS unless they have experience working in the industry (from, say, a summer internship or co-op terms).

Hell, mastery of basic DVCS operations (say, git pull, git commit, git merge, although equivalent experience with hg, perforce, or TFS would be reasonable) isn't a guarantee, even if students spent four months in a lab "using" such a tool.

The people who "do best" in university get told by their professors to become graduate students. Most are not optimized to teach the skills you seek -- if you picked a random fresh graduate and they happened to have those skills, it's probable that either they taught themselves or they learned them at another employer.

</comment></comment></comment></comment></comment><comment><USER10> I'm not in the US, but from what I've seen here and in other boards, the whole STEM Crisis is actually a HR Crisis.

No wonder you can't hire anyone if you want rocket scientists to build your world-changing photo sharing app.

<comment><USER11> Or ads, as Jeff Hammerbacher said better: "The best minds of my generation are thinking about how to make people click ads. That sucks."

<comment><USER12> Another way to look at it is that the best minds are thinking about how to optimise capitalism.

They are doing that and in effect we are all getting a better more efficient society. Plus the best minds aren't working on world peace because people vote for people with the best hair to do that job.

<comment><USER13> That only really makes sense if you think that ads are providing information that's relevant to people's best interests and is going to be fed into fairly rational decision making, rather than exploiting cognitive biases as an attack vector.

</comment></comment></comment></comment><comment><USER14> "That report argued that the best indicator of a shortfall would be a widespread rise in salaries throughout the STEM community. But the price of labor has not risen, as you would expect it to do if STEM workers were scarce."

The huge disparity of pay between different STEM disciplines should clearly show where the demand is. Biologists compete over shrinking government grants, while petroleum engineering students receive job offers of $90K starting. Treating STEM as a homogenous bloc will hurt the less in-demand fields while failing to treat the shortfall in others.

<comment><USER15> One of his points was that it is extremely hard to predict where the next boom in the greater STEM field will be. Several years ago, internet boomed, then bust, then boomed again. Meanwhile, petro rose while aerospace fell... It's precisely the point that, because STEM skills cannot cross fields (you try getting a rocket scientist to build you a photo-sharing app) that leads to moments of massive oversupply, then terrible shortage, and then massive oversupply again.

<comment><USER16> Cannot cross fields? My major was Me/Ae, took no CS courses, worked for Boeing designing airplane gearboxes and hydraulic systems, and yet I had no trouble transitioning to a CS career.

When I took mechanics/fluids/electronics/materials classes, I discovered that the math was all the same, except that the EEs liked to use 'j' instead of 'i'.

<comment><USER17> This speaks to how quickly what we're taught in school goes out of date. You were able to transition to CS, compete with same-age CS graduates, because much of what they were taught in school had become obsolete, while what you learned on the job became more and more valuable and relevant.

> ... except that the EEs liked to use 'j' instead of 'i'.

And that only because of the coincidence that 'i' refers to current in electrical equations.

It also addresses the issue that, with respect to getting useful results from a computer, one's mathematical knowledge and ability is now more important than one's knowledge of a computer's inner workings.

<comment><USER18> The subject matter becomes obsolete, but the mental processes and skills stay relevant.

Too much of education is aimed and evaluated for data storage rather than brain training.

<comment><USER17> Very true. Americans are taught what to think, not how to think.

<comment><USER18> In other countries it's worse rather than better. China comes to mind. In Germany I'm not hearing a lot of "mind training matters" noise out of education either.

<comment><USER17> > In other countries it's worse rather than better. China comes to mind.

Yes, or Japan, where being different or standing out in any way is seen as the height of rudeness. _Sumimasen, arigatōgozaimashita_

I guess we have to face the fact that the ability to think for oneself, and think critically, is rather unpopular, with rare exception.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER9> One of the things that seems suspect to me about this article is the conflation between "STEM" and "Computer Science / Software Engineering / Computer Engineering".

No where in the article is "STEM" defined precisely, but the author clearly notes that is NSF number includes health-care workers, psychologists and social scientists. Even if we replaced "STEM" with "Engineering" in the entire article, it's still a fallacy to say "there are 0.3 million engineering jobs, and 11.7 million engineering graduates -- there can't possibly a shortage of engineers." I wouldn't automatically assume that someone with an undergraduate degree in Chemical Engineering or Civil Engineering is qualified to work at <insert software company here>[0], in the same way that I would be completely unqualified to be hired run an oil field or draft up a plan for my city's mass transit system. Sometimes people _do_ have extra skills atop their degree that lands them in a job outside of their field, but that's not true for everyone.

If anything, I think the whole "STEM shortage" sounds like a plea to US post- secondary institutions to make their CS/EE/CE/SE graduating classes bigger -- perhaps at the expense of other STEM programs.

Edit: [0] I'm assuming a software company small enough that it's not doing city planning on its own. I wouldn't be surprised if there actually were Civil Engineers working at the likes of Microsoft and Google, trying to figure out the master plan for their main campuses, but that's not my point.

<comment><USER19> No, I think the issue is that software developers have reached a limit of how low a salary they are willing to work for, and not enough of them have a limit that is low enough for what companies are willing to pay so rather than cave in, the companies are playing politics with the hope of flooding the markets to drive prices down nationally.

<comment><USER9> If that is indeed the rationale, I don't think having more bodies in the SF Bay Area is going to help. (More people means housing prices will go up, and thus, the rational price accepted by half-decent developers should go up. It's easy to spend 70% of a entry-level Google salary on housing in the city right now.)

I wonder if buying up a bunch of houses in Detroit, and offering one as a starting bonus (along with gigabit Internet and a nearby Wal-Mart) would be enough to entice people to work for less.

</comment></comment></comment><comment><USER20> Anecdotally, my brother, with a Mech Eng degree, has been unemployed ever since he graduated a year and a half ago, despite looking constantly. He's married with a kid and lives with his wife's parents in a spare bedroom.

The STEM shortage is nothing more than employers looking for cheaper workers (either salary-wise, or without any obligation to train them the necessary skills).

<comment><USER18> If employers were looking for cheaper workers, your brother would have taken the cheapest job available wouldn't he?

After all, working as a Mech Eng even at minimum wage should for him be preferable to flipping burgers at minimum wage or being unemployed, especially with a family...

<comment><USER19> It depends. Countries with actual safety nets often provide enough unemployment money that one isn't forced to take some ridiculous "just be employed" job while looking for their next real job.

<comment><USER21> In the Netherlands we have enough unemployment money that one isn't forced to take some ridiculous "just be employed" job. But the longer you are unemployed, the harder it will be to find a new job. A hole in your resume doesn't look god

<comment><USER19> Of course. There is always the driver to actually work. In places that lack a safety net you have to take some "flipping burgers" job which you _still_ can't really report on your resume so you end up with no time _plus_ that ugly hole in your resume.

</comment></comment></comment></comment></comment><comment><USER22> The only people who claim there are plenty of talented developers to hire are people who have never tried to hire one in the last three-plus years.

I hire developers anywhere in the world to work on cutting edge infrastructure software and it's still tough. But not as tough as restricting us to the Bay would be.

<comment><USER23> Sigh... Could you please add the salary that you are looking for? I'm going to guess it's too low.

<comment><USER3> To be fair from his point of view he would still be correct - there are not enough developers available to push the price below his threshold.

<comment><USER5> Tough. That's the real world. Complaining that "there aren't enough good cars available to buy" when all I want to spend is €500 will not get much sympathy.

<comment><USER3> If you say "not enough x" the question is always "for what?". That usually isn't even answered in those articles. Not enough developers to defeat cancer and world hunger? Or what?

</comment></comment></comment></comment></comment><comment><USER24> _And until those new recruits enter the workforce, tech companies like Facebook, IBM, and Microsoft are lobbying to boost the number of H-1B visas—temporary immigration permits for skilled workers—from 65 000 per year to as many as 180 000._

So, assume a $30K salary differential, times 115K jobs = $3.45 Billion dollars in savings.

Well, that will pay for some lobbyists...

</comment><comment><USER25> Duh? There has never been a STEM shortage, at least in the US. Ever. There has only been duplicitous propaganda on the part of companies that want to raise the H1-B limit in order to push down wages.

</comment><comment><USER26> "The government of India has said it needs to add 800 new universities, in part to avoid a shortfall of 1.6 million university-educated engineers by the end of the decade."...

That's wildly optimistic. The reality is unemployment rate for indian engineering graduates now ranges from an optimistic 50% upto 80%..

[1] [http://www.livemint.com/Industry/HCWB4sLvFBxfIFyNBYtqOP/Degr...](http://www.livemint.com/Industry/HCWB4sLvFBxfIFyNBYtqOP/Degree- in-hand-a-generation-of-engineers-looks-for-alternat.html)

[2] [http://articles.economictimes.indiatimes.com/2013-06-18/news...](http://articles.economictimes.indiatimes.com/2013-06-18/news/40049243_1_engineers- iit-bombay-batch-size)

</comment><comment><USER17> Unsurprisingly, different groups define "shortage" differently. Employers call the shortage real because they can't hire employees cheaply. Employees call the shortage a myth because they can't find a position with a desirable salary.

</comment><comment><USER27> Although difficult to analyse, we must also consider the quality of STEM degrees from different institutions. There's a world of difference between a first class degree in Physics obtained from Cambridge compared to say Stafforshire. Some Universities in the UK have unemployment rates for graduates over 25%. [http://www.telegraph.co.uk/education/educationnews/10159647/...](http://www.telegraph.co.uk/education/educationnews/10159647/One- in-five-graduates-from-worst-universities-left-jobless.html)

</comment><comment><USER28> The problem is that many STEM majors are not the kind of STEM workers there is a demand for. In my country a big share of people who have a CS degree barely know how to write real code. I think it's because 1. the education is too theoretical 2. free education system (no barrier means a lot of people who study without having any real interest in programming).

<comment><USER19> 2 seems unlikely. If education is free, why not learn what ever you want? If educate is insanely expensive then unless your family is rich, you have to try and make sure what ever you study can recoup those costs.

<comment><USER28> Because people don't know what they want to do so they just jump on any education. I've been there. It's so easy to start university that literally everyone does it and what you actually read is secondary.

In fact, many people choose bogus courses like "hat science" just to get study allowance and access to the other benefits. So it's not surprising people pick CS thinking "it's good money so why not".

</comment></comment></comment><comment><USER29> Part of the problem is that we also put people through an extraordinarily difficult educational process (CS or similar) for what's largely become a skilled vocational problem. 90% of developers working on 90% of their work will never have to implement an algorithm of any kind that matters. They won't have to understand higher maths, computational theory, language theory, etc. They have to glue this piece from here with this piece from there and write some documentation that they did so.

On the flip side, spending four years learning about computability theory instead of the latest frameworks in foo language likewise doesn't prepare a CS major for employability. Their first employer will have to spend lots of time and money training them in the vocational skills they'll need.

Universities' attempts at recognizing this and educating students for this reality give us majors like Software Engineering and Information Systems which don't exactly match what the market needs either.

What's needed is to take a relatively smart, but ignorant person off of the street, and in 4 years spit out a mid-level developer, with specialties in web development, server development, etc. Their coursework should be nothing but learning languages, APIs, development environments and frameworks and how to coherently document their work.

For those specializing in web development, their senior project should be to build, from scratch, an entire e-commerce site, with product catalogs, promo codes, wishlists, shopping carts etc, including setting up all the servers, and gluing them together. The entire thing should be meticulously documented and launchable _tomorrow_.

Similar senior projects should go to those specializing in game development (like the senior projects out of digipen), desktop software development (make a basic office suite), server software development (write a database and web server from scratch with full APIs), etc.

In very specific markets this has already happened. Video Game development, for example has spawned vocation focused education like digipen.

CS is both over _and_ underkill for most jobs. And the result is that we interview for CS skills, for a job that doesn't really need them.

</comment><comment><USER30> My personal anecdote supporting the idea of an STEM crisis:

I'm not a developer. Last year, I was learning programming. I also had a track record of starting and successfully executing projects. Small personal ones, but they made money.

I tutored a student for the LSAT, and he thought I was smart. When he heard I was learning programming, he introduced me to his sister's boyfriend, who was a manager at a local hardware/software firm.

The guy met with me, was interested in turning me into a developer and offered me a decent salary to do so.

He said he couldn't hire enough competent developers.

I ended up pursuing another opportunity (large commute at this job + I wanted to build my own stuff), but this impressed on me the high value currently given to STEM expertise. I didn't have any! Just an interest was enough.

Edit: I has learned the basics of programming, having gone though most of K & R, and a couple of Udacity courses. But I has no programming skills that were worth paying for at that particular moment. Nothing tht could immediately make anyone money.

</comment><comment><USER31> No one even talks about a crisis of too few English majors. That seems to be beyond dispute. So maybe there is a bit more of a kernel of truth to the idea that some (perhaps not all) STEM occupations have a limited supply of capable workers.

<comment><USER32> limited supply of capable workers, yes. 100% agree. But if you have an oversupply of workers in general, out of which it's difficult to tell which ones are capable, then what?

<comment><USER31> A fair question. Use research-based hiring procedures

[https://news.ycombinator.com/item?id=5227923](https://news.ycombinator.com/item?id=5227923)

to sift through the many persons with degrees (or even without degrees) to find the smaller number of persons who can actually do the job. Key idea: use a work-sample test to hire for any job.

<comment><USER32> you can't really do that for biology or chemistry.

</comment></comment></comment></comment><comment><USER33> STEM seems to me to be very much _not_ zero-sum, so I think the more the merrier.

<comment><USER32> it can be worse than zero-sum. If you dilute the workforce with idiots, you could wind up with a situation where projects requiring insight get completely derailed and moreover actually competent people get passed over time after time and quit the endeavor in frustration. This is what is happening in the sciences.

<comment><USER33> > If you dilute the workforce with idiots

This seems to be the sort of problem that markets are pretty good at dealing with. I wouldn't worry about it.

<comment><USER32> Market heavily distorted by governments wanting to fund science as a source of national pride. As you well know, number of PhDs correlates to national greatness.

</comment></comment></comment></comment><comment><USER34> "They" have been crying about a lack of STEM (it used to just be scientists and engineers) for at least 30 years.

I don't listen to it any more. When I walked out with my doctorate, jobs were very scarce in the science/engineering fields (although software jobs were increasing).

From what I can gather, the soothsayers simply do a linear extrapolation of current jobs and candidates, and show a shortage. They do no real _forecasting_ by trying to reason about future needs.

So, I don't pay attention any more.

</comment><comment><USER35> I'm generally happy to see STEM funding in education[1] really, I am happy to see any funding in education. But, the "STEM shortfall" (if there is any) isn't because of a lack of funding for specific education program, but because of a lack of demand in those fields. If companies are having trouble finding proper candidates for jobs (they tell me that they are), they either need to look at their selection process (which IMO is pretty terrible) or offer more money; probably a little bit of both. It requires a little more discipline and sacrifice to earn a STEM degree vs many of the other degree tracks, many of these students change plans to a simpler track that gets them more money for their effort.

[1] Disclosure: I am a STEM educator, and I am a little bit worried that this effort might even flood the market for STEM grads lowering wages.

</comment><comment><USER36> Grade inflation (related to political pressure about the STEM shortage narrative) is such that a larger proportion of STEM graduates than ever before are mostly useless.

</comment><comment><USER37> Maybe the homogeneity of STEM labour is what the myth is.

</comment><comment><USER38> I don't understand what a "shortage" entails.

</comment><comment><USER39> Wow, My Friend just launched a stem job board on Monday. If there is a transition from "Alarm" to "Boom", this seems like a great business opportunity.</comment>


Rails – The Missing Parts - <AUTHOR> http://eng.joingrouper.com/blog/2014/03/03/rails-the-missing-parts-interactors <comment><USER2> The proof is always in the pudding. While there are good and reasonable times to introduce "interactors", this particular example is poor. The tests presented are anemic, and the code is absolutely not any clearer by being extracted and wrapped. I would indeed have kept all this in the controller.

The key point for an "interactor" extraction is imo when you have multiple models being created in symphony, like a Signup model. Or if you for some reason need to reuse the behavior.

But if all your controllers look like this, with one "interactor" model per action, you're doing it wrong.

Whatever floats your boat, though. If this is what you prefer, great. But please hold the "beginner's version" crap. Plenty of large apps are built with vanilla Rails. Basecamp is one.

<comment><USER2> I rewrote the code in this example to use the "Beginner's Version" of Rails ( _sigh_ ). You judge which you like better: [https://gist.github.com/dhh/9333694](https://gist.github.com/dhh/9333694)

<comment><USER2> Here's another version that doesn't even use private methods in the controller and uses a PORO for the email grouping: [https://gist.github.com/dhh/9333991](https://gist.github.com/dhh/9333991)

<comment><USER3> I can't seem to find it on Google. What's a PORO?

<comment><USER4> Plain Old Ruby Object, as opposed to an ActiveRecord model.

</comment></comment></comment></comment></comment><comment><USER5> Perhaps because it's written with examples in java but I often feel like no one in the rails community has ever read Eric Evan's Domain Driven Design[1]. It's far and away the best material I've ever seen on how to organise large code bases. It covers pretty much every suggestion that I've seen from the rails community. Sometimes the rails community can feel like the fitness industry, everybody just rebranding things that have been done before.

[1] [http://www.amazon.com/Domain-Driven-Design-Tackling- Complexi...](http://www.amazon.com/Domain-Driven-Design-Tackling-Complexity- Software/dp/0321125215)

<comment><AUTHOR> Sure - I don't think anyone in the Rails world is claiming to have invented these principles.

The problem is that Rails ships with a very limited set of core architectural concepts, and many inexperienced Rails developers feel like they've got to cram all of their code into a Model, View or Controller.

Once your codebase reaches a certain complexity, principles from other programming paradigms are extremely useful.

<comment><USER6> > "The problem is that Rails ships with a very limited set of core > architectural concepts, and many inexperienced Rails developers feel like > they've got to cram all of their code into a Model, View or Controller."

The problem is that people think Rails is an architecture to begin with. Rails is just a framework that uses the MVC pattern (mangled slightly to fit the realm of HTTP). In the end, MVC is nothing but a directory structure for our files. What you put in those files and directories is up to you. Uncle Bob gave a great keynote on this called Architecture: The Lost Years. Here's a link: [http://www.confreaks.com/videos/759-rubymidwest2011-keynote-...](http://www.confreaks.com/videos/759-rubymidwest2011-keynote- architecture-the-lost-years)

<comment><USER7> You have to realize: Rails is incredibly populist in that it's "good enough" architecture for many devs. It's not terrible, but it's not at all the same as learning basic architectural principles for building apps. Devs don't stray outside of it much, they just deal with it when it gets to be a problem.

In this way, we've successfully commoditized another differentiating factor of developers so we can ship on Internet Time(tm).

</comment></comment></comment></comment><comment><USER8> I've spent more time thinking about clean architecture and design than most and the conclusion that I've come to is while Ruby gives you all the tools to write clean code and great architecture, it doesn't offer the best tools to do that job.

Ruby and Rails feel best as a prototyping platform for getting something out the door fast, proving a concept, and not worrying so much about correctness or maintenance.

I don't think if you are doing a lot of TDD and larger systems that piling on more Ruby and Rails is the right answer. I think once you know what you are working with, a well designed language with a compiler is a huge help and would remove a ton of useless tests and stuff that you end up writing in Ruby by hand.

This very likely leads to an API driven system with an API written in a strongly typed, compiled language like C#, Java, Scala, Haskell, or Go and writing your front end in whatever makes the most sense for your team.

At that point you get the benefits of a nice rapid development platform like Rails for your front end, and a fast, testable, API written in something else using all the clean code architecture you want.

The trick is, you do everything ugly in Rails or PHP or whatever in your initial prototype and you might not even write tests. You just ship working code until your prototype has proven a business case. Then, you move it towards something with lower TCO over time. Make the investment in your code when it makes sense to invest in it and use the best tool for the job at each step.

You probably never need to leave the standard Rails MVC stuff on most projects unless they are wildly successful and/your long term needs change. Even then, you can probably keep the rails front end stuff and just talk to an API and be very happy.

</comment><comment><USER9> I agree completely that the Interactor pattern makes for cleaner Models and Controllers in a Rails codebase. I've used both the Interactor gem and PORO (in a directory outside of /app or /lib).

Having worked with the Interactor gem for a little while once you break things down into small interactors that can be used by the Organizers, I have two main complaints.

1) inputs are unclear. With calling new or some custom class method you can use descriptive variable names to say what the object expects to be present to do it's job. With the Interactor gem you end up adding in comments describing what keys need be present in the context and what keys will be added to the context so the next programmer can use the interactor you've created without having to go through and grok everything.

2) You end up having to (re)create a failure protocol to communicate with the controller and display to the user. We take the AR errors functionality for granted in our controllers/views with interactors you have to come up with a similar system.

2.5) as a result you end up writing a lot of boilerplate fail! and rollback code

2.5.2) and a non-atomic operation like notifying the payment gateway can break the whole model of rolling back and you have to end up raising so your user doesn't end up in a invalid state or get charged twice.

<comment><AUTHOR> Agreed, especially on (1). I don't love the lack of explicit inputs.

We've got a convention that all Interactors must be commented to specify what inputs they take.

</comment></comment><comment><USER10> Along the same line but heavier weight than 'Interactor' is 'ActiveInteraction'[1].

Responds in much the same way active record does, allowing validations, errors, forms built from interaction objects, etc.

[1] [http://github.com/orgsync/active_interaction](http://github.com/orgsync/active_interaction)

</comment><comment><USER11> We tried using DHH's concerns in place for interactors, but ditched them for PORO/service objects because they can be tested outside Rails.

<comment><AUTHOR> Yeah - I feel like concerns are a bit of an anti-pattern, especially as they're normally used in Rails.

You've got a God class that exposes 500+ public methods, so you split it into concerns. But now you've still got a God class with 500 methods that's split across 10 files. Good luck understanding that.

Concerns are useful when they're genuinely sharing functionality between classes - not just for splitting up "Big Bags O' Methods".

<comment><USER12> > Concerns are useful when they're genuinely sharing functionality between > classes - not just for splitting up "Big Bags O' Methods".

Hmmm. I'd say it depends.

Of course having concerns (a fancy word for modules IMHO) shared between classes is great. But i've also found cases where separating a god class' behaviour into different concerns helped a lot. The important thing in those cases was recognizing and avoiding dependencies between different concerns, so instead of ending up with a god class split across many files of inter- dependant code (i.e. worse than before), you can end up with a "god" class split into its minimal "core" part and a couple of concerns that only depend on that core part but not between each other. Yes, you could still call that a god class, as it will have a very fat public API, but at least you can reason about what it does in terms of different concerns, so you gain something :)

</comment></comment></comment><comment><USER13> One thing I really enjoy with this post is the conclusion. It doesn't try to tell you it's the only way, just that it's the way they found to fix their problem with the constraints they had, as it should be.

Rails is easy to extend, people often forget that. Great post.

</comment><comment><USER14> We've also come across the limitations of Rails as a one-size-fits-all solution for larger codebases. I don't think this is a fault of Rails, but more of the developers using the framework. Software engineering in general has more focus on a wide variety of design patterns and doesn't limit itself to one framework. In my opinion, Rails is the best framework to create wonderful web applications. Modeling business logic requires different kind of architectures than the simple MVC-ish structure Rails provides.

At MoneyBird we are using the Mutations gem to represent something like the interactors mentioned in this article. One major advantages of Mutations, is that is also does input filtering.

[https://github.com/cypriss/mutations](https://github.com/cypriss/mutations)

</comment><comment><USER15> I've been looking into incorporating this pattern into my larger Rails apps as well. Another benefits of interactions is DRYing up your code for use in APIs. Some of the more popular interactor gems:

[https://github.com/orgsync/active_interaction](https://github.com/orgsync/active_interaction) [https://github.com/cypriss/mutations](https://github.com/cypriss/mutations)

<comment><USER6> If you need a gem to implement some of these complementary patterns, you're doing it wrong. Draper, Naught, DisplayCase and all of the other gems of patterns are over abstraction 99% of the time. Implement the pattern yourself. Most of these Presenter and Service object patterns are different variations of the Decorator pattern. Ruby happens to ship with 3 great ways to implement decorators: SimpleDelegator (my personal favorite)[0], Delegator[1] and Forwardable[2].

0 - [http://www.ruby- doc.org/stdlib-1.9.3/libdoc/delegate/rdoc/Si...](http://www.ruby- doc.org/stdlib-1.9.3/libdoc/delegate/rdoc/SimpleDelegator.html)

1 - [http://www.ruby- doc.org/stdlib-1.9.3/libdoc/delegate/rdoc/De...](http://www.ruby- doc.org/stdlib-1.9.3/libdoc/delegate/rdoc/Delegator.html)

2 - [http://www.ruby- doc.org/stdlib-2.0/libdoc/forwardable/rdoc/F...](http://www.ruby- doc.org/stdlib-2.0/libdoc/forwardable/rdoc/Forwardable.html)

<comment><USER16> The biggest pain points that gems like Draper solve are allowing view helpers in your decorators (which is by no means straightforward when you get into routing helpers), and dealing with some of the strangeness that you get into by wrapping ActiveRecord models (JSON serialization was a biggie for us). It's less about what Ruby gives you, and more about navigating around some of the darker, messier corners of Rails.

<comment><USER6> They just wrapped the view_context with a method_missing proxy (another form of a Decorator) that the controller instance gives you. You can accomplish the same very easily using dependency injection in your controller action:

MassivelyUpVotedPostPresenter.new(@post, self.view_context)

Or just inject the whole controller instance and you have your router helpers too!

MassivelyUpVotedPostPresenter.new(@post, self)

</comment></comment></comment></comment><comment><USER17> I've found a happy balance developing with rails by adding two strategies:

1) Use presenters for display-only logic to keep controllers concerned with managing requests only.

2) Using service object / custom classes in /lib for actions on models as well as abstracting any common related functionality. Creators, Updaters, Processors, Orchestrators, etc. Keep your models only concerned with data and not data transformation, and your controllers from doing it as well.

<comment><USER18> I have documented my strategy for moving from a simple MVP to a maintainable and complex Rails app. Basically I look at factors like how many objects are affected by an operation, and how complex the additional processing is. TL;DR: Use Rails magic when possible, and Object Oriented best practices when necessary.

I created a flowchart that illustrates this strategy: [http://rails- recipes.clearcove.ca/pages/how_to_change_object...](http://rails- recipes.clearcove.ca/pages/how_to_change_objects.html)

</comment></comment><comment><USER19> This is great, and does not only apply to Rails. In many other frameworks it's common to lump business logic in controllers instead of models. Either way you end up with the same thing: eventually you'll need to add a 4th (at least) type on to MVC.

> Here at Grouper, we're long-time users of Ruby on Rails – along with other > New York startups like RapGenius, Etsy and Kickstarter.

Etsy doesn't use Rails though, it uses PHP.

<comment><AUTHOR> Fixed, thanks

</comment></comment><comment><USER20> Can anyone recommend a github repo of a Rails app implementing interactors or any of the similar concepts listed in the comments?

<comment><USER21> I humbly submit my own work: [http://hawkins.io/2014/01/rediscovering-the-joy- of-design/](http://hawkins.io/2014/01/rediscovering-the-joy-of-design/)

</comment></comment><comment><USER22> How about just "features"?

Maybe there are some "user" features (login, logout, change name) and "cart" features (add/remove item in cart).

These features would all live horizontally, be able to call each other (design your object graph wisely!) and would never be able to inspect or elaborate on implementation details!

These features may or may not talk to some database for its own persistence, but that's up to the functions.

And the features are pure functions in your language of choice. They have no knowledge of the web, or requests, they're perfectly transient. They act on a "state" object that you pass around to them, which in tests is just a blob of memory and in production is a real database or wherever else you store state.

It's simple, yet so powerful. This is how we do it, and it's scaling very nicely.

</comment><comment><USER23> As always, the question is should be in Rails or not.

I think that the answer is clear, this should not be a part of rails since it's not true to all apps.

I think that if you want to have something real quick, you don't need an interactor/service class.

When you have a bigger app, you definitely need that, or you will get to a point where you code is split into models/observers/callbacks/lib/app/concerns and you can't find anything.

Rails generators are pretty easy to extend, this way, when you generate a new model, you can easily create the service class for it.

You can also EASILY create new generators that will generate the service classes for you with your defaults and templates and what not.

Not sure Rails is missing that, however, it is definitely a best practice that people with bigger apps should use TODAY.

<comment><USER16> Mailers, concerns, helpers, observers and a lot of other things in Rails aren't universally used by all apps. Even something as simple as an empty directory and some generators in a stock Rails app would go a long way in educating people that these are patterns that you can use / provide a common language for where these sorts of things should go and what we should call them.

</comment></comment><comment><USER24> I recommend this article from the guys from Code Climate, it is really mind- opening: [http://blog.codeclimate.com/blog/2012/10/17/7-ways-to- decomp...](http://blog.codeclimate.com/blog/2012/10/17/7-ways-to-decompose- fat-activerecord-models/)

The author describes different ways of refactoring fat ActiveRecord models, but most of the ideas can be used outside ActiveRecord, as "best practices".

I have been using some of the patterns described in it and I am really happy with the results. The code becomes more clearly decoupled, is easy to test and results in clean, slim models.

</comment><comment><USER25> When reading DHH's comments it's important to remember that the domain model for Basecamp is extremely simple. It's a brilliant piece of software that's been well thought out, but the underlying domain concepts are extremely basic.

I wonder if he's ever worked with an app that has a complicated domain.

His comments taken from this perspective make a lot of sense. Rails was written for Basecamp.

For large apps with real complexity, the rails way falls short.

</comment><comment><USER26> "The nail in the coffin is ActiveRecord callbacks; before_save hooks on one class that modify the state of other objects."

before_save _can_ modify the state of other objects. It doesn't have to. One might use it to modify only the state of the current model. You are reaching a bit, blaming the callback, when what you are really concerned with is an awkward and potentially dangerous use of the callback.

</comment><comment><USER27> What's the different between interactor and wisper? Wisper is better doing the job in your example.

interactor: [https://github.com/collectiveidea/interactor](https://github.com/collectiveidea/interactor) wisper: [https://github.com/krisleech/wisper](https://github.com/krisleech/wisper)

</comment><comment><USER28> A good litmus test of an experienced Rails developer is how large their /lib directories are in relation to project sizes.

<comment><USER29> Is a large /lib a sign of experience or inexperience? I try to keep as much as possible out of /lib and moved into gems.

<comment><USER30> Inexperience. lib/ quickly turns into a dumping ground unless you are careful to keep it clear of business logic.

</comment></comment></comment><comment><USER31> I wrote a blog post along similar lines [1]. The benefits are clear to me: nearly 200 tests run in about a second. For that reason alone I wouldn't consider coupling domain logic with ActiveRecord.

1\. [http://www.smashingboxes.com/domain-logic-in- rails/](http://www.smashingboxes.com/domain-logic-in-rails/)

</comment><comment><USER32> One thing I can't figure out is whether to place my service objects under `/app/models` or under `/lib`. There doesn't seem to be a clear consensus on this? I tend more towards the former, because autoload works better during development. Also, I consider them part of my domain model. What do you do?

<comment><USER33>
      /app/interactors

It's a trivial thing to add new folders like this to autoloading:

      # add to application.rb
      config.autoload_paths += %W(#{config.root}/app/interactors)

<comment><USER34> As of Rails 3.0, I believe app/anything/ is autoloaded:

* [https://github.com/rails/rails/blob/3-0-stable/railties/test...](https://github.com/rails/rails/blob/3-0-stable/railties/test/application/initializers/load_path_test.rb#L43)

* [http://hakunin.com/rails3-load-paths](http://hakunin.com/rails3-load-paths)

</comment></comment></comment><comment><USER35> If anyone's interested in a more real-life example, then this post presents a Rails controller refactoring from the Redmine project.

[http://blog.arkency.com/2014/02/rails-refactoring-the-aha- mo...](http://blog.arkency.com/2014/02/rails-refactoring-the-aha-moments/)

</comment><comment><USER36> The first missing part: A language with a sane syntax. For some examples of the multitude of ways in which Ruby syntax is awful, see [1].

The second missing part: Ruby is Rails. Trying to learn Ruby _at the same time_ as a modern web framework with all its moving parts? Forget it.

The third missing part: Tutorials. Okay, I haven't done a rant on this. Google rails tutorial. The first helpful result I get [2], I scroll down. The first meat is "Setting the application home page". I see this:

        Blog::Application.routes.draw do
          get "welcome/index"

Huh? "This is your application's routing file which holds entries in a special DSL (domain-specific language) that tells Rails how to connect incoming requests to controllers and actions." So it's not even Ruby or some recognized Web glue language like HTML or CSS; it's some domain-specific language? Okay, I totally don't get it, so as suggested, for more details, I should refer to "Rails Routing from the Outside In" [3].

This is even more confusing. It says you should do something like this:

        get '/patients/:id', to: 'patients#show'

Huh? What's the deal with the colons and octothorpe? I can guess colon is the signifier for an ID in the URL, but why the pound sign for #show?

        get '/patients/:id', to: 'patients#show', as: 'patient'

And what's the deal with the colons?

I could go on and on. I'm sure that with a few hours of pain and frustration, I would be able to figure out exactly all the oddities of Ruby syntax, or the template language, or the DSL whatever, and understand this example well enough to extend it.

But that's not the point. The point is that, because I have to spend those hours, it means that Ruby/Rails is poorly designed. In Django, by contrast, things are almost always simple and obvious.

[1] [https://news.ycombinator.com/item?id=5872899](https://news.ycombinator.com/item?id=5872899)

[2] [http://guides.rubyonrails.org/getting_started.html](http://guides.rubyonrails.org/getting_started.html)

[3] [http://guides.rubyonrails.org/routing.html](http://guides.rubyonrails.org/routing.html)

<comment><USER37> Ruby has a sane syntax. It probably seems a little foreign if you're new.

'#' is the standard notation used throughout the Ruby language for instance methods.

Think of it like this:

      Blog::Application.routes.draw do |implicit_self|
        implicit_self.get( '/patients/:id', { to: 'patients#show', as: 'patient' } )
      end

</comment></comment><comment><USER37> I like the interactor gem but don't understand why the method activating it is "perform".

Why isn't it "call" so it can be swapped out with a lambda, or method reference without hassle?

<comment><USER37> As in this article. [http://blog.arkency.com/2014/02/rails-refactoring-the- aha-mo...](http://blog.arkency.com/2014/02/rails-refactoring-the-aha-moments/)

Services should be run with call.

</comment></comment><comment><USER38> It sounds similar to what Lotus is trying to do.

[http://lotusrb.org/](http://lotusrb.org/)

<comment><USER39> How do you even know about this, so unknown, Thanks :).

</comment></comment><comment><USER40> I thought Etsy uses PHP. Could be wrong.

<comment><USER41> I can confirm that Etsy.com is primarily PHP. We have no externally facing Rails projects. We have some internal tools on Rails.

\-- firstname.lastname@example.com

<comment><AUTHOR> Sorry, fixed!

</comment></comment></comment><comment><USER42> I would love to take a glimpse on the Basecamp code, dhh ;)</comment>