[HN Gopher] Mike Perham, Creator of Sidekiq: From Employment to ...
       ___________________________________________________________________
        
       Mike Perham, Creator of Sidekiq: From Employment to Independence
        
       Author : derekkraan
       Score  : 169 points
       Date   : 2023-04-14 08:02 UTC (14 hours ago)
        
 (HTM) web link (codecodeship.com)
 (TXT) w3m dump (codecodeship.com)
        
       | andris9 wrote:
       | Mike Perham's Sidekiq was what I modeled my own business,
       | EmailEngine, after. I took my decade's worth of expertise in
       | email protocol implementations (I also run the open-source
       | Nodemailer library) and built an email gateway app my customers
       | can download and run on their machines or servers. Just like
       | Sidekiq Pro, the customers need an active subscription to run it,
       | but the app runs on their premises, and they maintain it. I only
       | run the key generation and validation server, which costs me
       | around $50 per month, including all the backups and so on.
       | 
       | I quit my job to go full in with EmailEngine exactly one year
       | ago, when MRR for EmailEngine was $500, now it is $3,900 and
       | steadily growing. I do work full time on it, but the result is
       | async - the work I put into EmailEngine today brings me income
       | sometime later, and the recurring income I receive today is
       | unrelated to any effort I put into the company right now.
        
         | albertgoeswoof wrote:
         | I was just about to post emailengine here, the business model
         | is so similar to sidekiq.
         | 
         | Any other great ideas?
        
           | andris9 wrote:
           | Yeah, it is so similar because I blatantly copied it. I had
           | the old Changelog podcast episode with Mike Perham pretty
           | much on repeat when I tried to figure out how exatly to set
           | up my business.
        
         | mperham wrote:
         | Congratulations, that's great. I'm always happy to hear of more
         | successful indie developers.
        
         | alberth wrote:
         | Unsolicited feedback, always link to your business in your
         | posts.
         | 
         | I googled "emailengine" and it's wasn't super obvious which was
         | your business since so much paid ads exist for that search.
        
           | andris9 wrote:
           | Oh, yeah, I forgot my pitch. The link is
           | https://emailengine.app - EmailEngine acts as a mail client,
           | basically the same way Thunderbird runs on desktop, or the
           | iPhone Mail on the phone, but instead of a GUI it has REST
           | API and instead of desktop notifications it sends JSON
           | webhooks. And instead of a single email account, it can
           | manage thousands of accounts.
        
       | thaumasiotes wrote:
       | > I was Director of Technical Operations at The Clymb, which was
       | outdoor-focused e-commerce vendor (think REI without the stores).
       | I had a team of four and we were responsible for site devops and
       | infrastructure. This was perfect because they were my alpha
       | customer and I was in charge of the tech stack. The Clymb
       | switched to Sidekiq immediately, of course, and every Sidekiq Pro
       | feature I wrote was running in production before it was released.
       | 
       | This makes me curious about either
       | 
       | (a) conflict-of-interest rules at The Clymb that may or may not
       | have governed the DTO directing the company to use his own
       | separately-owned (commercial?) software.
       | 
       | (b) negotiating private ownership of software written for The
       | Clymb.
       | 
       | One of those must have been relevant?
        
         | mperham wrote:
         | I started work on Sidekiq right before I joined so I made sure
         | my employment contract had a IP carve out for anything related
         | to Sidekiq.
         | 
         | I never charged The Clymb to use the software. Previously they
         | had been using delayed_job and were suffering badly from scale
         | issues due to the use of MySQL as their queue store.
        
       | fidrelity wrote:
       | Mike Perham is an inspiration to me both in terms of Ruby/tech as
       | well as business.
       | 
       | I've been using sidekiq now for almost a decade and had the
       | pleasure to meet Mike at a Ruby conf many years ago.
        
       | aqme28 wrote:
       | Love Sidekiq and loved how he runs it. Really feels like the
       | right way to make money on OSS. Enterprise never crippled the
       | free version.
        
       | joshmn wrote:
       | I've said this to Mike and I'll say it again: I hope he never
       | gets a job.
        
       | everybodyknows wrote:
       | Naive question: How do you deter thieves who would pose as legit
       | customers, but instead redistribute the library?
        
       | john_fushi wrote:
       | I guess Matsumoto should have charged for Ruby. I'm sure Mike
       | Perham and Derek Kraan would have been glad to pay for that and
       | that the Ruby community would be in a strong and healthy shape.
        
         | ianbutler wrote:
         | People need to eat man, doing something for free is a luxury
         | not many possess. We can see how messed up the financial
         | situation is for a lot of Open Source devs and their lives
         | would be better if they were charging money instead of
         | subsisting off grants and donations.
         | 
         | I don't even necessarily disagree with your point that without
         | being free those things wouldn't have taken off but we need to
         | find a way to strike a balance in the developer community.
         | 
         | Sidekiq having a free version and an enterprise version walks
         | an okay middle line imo.
        
           | wyldberry wrote:
           | I personally try to spend money or use ad supported anything
           | that is open-source just to help someone else eat. It really
           | hit home for me about five years ago when the author of a WoW
           | addon[0] couldn't develop anymore because of his financial
           | and life situation.
           | 
           | So many communities across the web rely on people putting in
           | their spare hours for free just to enjoy things. Whether it's
           | spreadsheets in Eve, Addons and Weak Auras in WoW, forum
           | analysis posts, or whatever goes on in the depths of pvpoke,
           | so much free labor underpins massive parts of the world
           | today.
           | 
           | I would love something that I could donate x money to per
           | month and then based on usage, have it dole out to all the
           | content providers with perhaps a minimum per month. It just
           | seems daunting to do that as a) not a crypto scheme and b.)
           | across all the various creator landscapes.
           | 
           | [0]https://www.polygon.com/2018/9/25/17901552/world-of-
           | warcraft...
        
         | bdcravens wrote:
         | Not by Matz, but there are paid versions of Ruby out there.
        
         | mattgreenrocks wrote:
         | Hilarious take given the fact that there are plenty of orgs
         | making an order of magnitude more than Mike is that rely on
         | Ruby.
        
         | ch4s3 wrote:
         | This is a very bad take. From an OSS perspective languages can
         | attract large communities of contributors and corporate
         | sponsors because of their broad appeal and utility. Specialized
         | libraries will have more trouble doing both and may need
         | alternate models to sustain themselves. From a business
         | perspective, Mike offers not only a free version but the paid
         | enterprise version comes with support from Mike and his team,
         | which is something you can't get from a language owner unless
         | you outright hire them or they run a consultancy.
        
         | jorge-d wrote:
         | Well Sidekiq is free to use. It's only the pro version that he
         | charges and the free version code is open source.
         | 
         | I don't see the problem in having that kind of business model,
         | it still allows the community to thrive and offers entreprises
         | a way to have premium support.
         | 
         | Plus it allows him to invest more time in maintaining the free
         | version.
        
           | phamilton wrote:
           | I have no problem paying for the Pro version, but one if its
           | marketing pitches is "enhanced reliability", which is a wild
           | marketing spin on "the free version will lose jobs in fairly
           | common scenarios".
           | 
           | In sidekiq without super_fetch (a paid feature), any jobs in
           | progress when a worker crashes are lost forever. If a worker
           | merely encounters an exception the job will be put back on
           | the queue and retried but a crash means the job is lost.
           | 
           | Again, no problem paying for Pro, but I would prefer a little
           | more transparency on how big a gap that is.
        
             | durkie wrote:
             | how often do your workers crash? i rely heavily on sidekiq
             | and don't think I see this very often, if ever.
        
               | kubectl_h wrote:
               | In containerized environments it may happen more often
               | due to OOM kills or if you leverage autoscalers and have
               | long running sidekiq jobs that have a runtime that
               | exceeds your configured grace period for shutting down a
               | container during a downscale and the process is
               | eventually terminated without prejudice.
               | 
               | OOM kills are particularly pernicious as they can get
               | into a vicious cycle of retry-killed-retry loops. The
               | individual job causing the OOM isn't that important (we
               | will identify it, log it and noop it), it's the blast
               | radius effect on other sidekiq threads (we use up to 20
               | threads on some of our workers), so you want to be able
               | to recover and re-run any jobs that are innocent victims
               | of a misbehaving job.
        
               | Colex wrote:
               | it's not uncommon to lose jobs in sidekiq if you heavily
               | rely on it and have a lot of jobs running. If using the
               | free version for mission critical jobs, I usually run
               | that task as a cron job to ensure that it will re-try if
               | the job is lost.
               | 
               | I have in the past monitored how many jobs were lost and,
               | although a small percentage, it was still recurring
               | thing.
        
               | phamilton wrote:
               | We process around 50M sidekiq jobs a day across a few
               | hundred workers on a heavily autoscaled infrastructure.
               | 
               | Over the past week there were 2 jobs that would have been
               | lost if not for superfetch.
               | 
               | It's not a ton, but it's not zero. And when it comes to
               | data durability the difference between zero and not zero
               | is usually all that matters.
               | 
               | Edit for additional color: One of the most common crashes
               | we'll see is OutOfMemory. We run in a containerized
               | environment and if a rogue job uses too much memory (or a
               | deploy drastically changes our memory footprint) the
               | container will be killed. In that scenario, the job is
               | not placed back into the queue. SuperFetch is able to
               | recover them, albeit with really lose guarantees around
               | "when".
        
               | ZephyrBlu wrote:
               | Let me get this straight, you're complaining about eight
               | 9s of reliability?
               | 
               | 50,000,000 * 7 = 350,000,000
               | 
               | 2 / 350,000,000 = 0.000000005714286
               | 
               | 1 - (2 / 350,000,000) = 0.999999994285714 = 99.999999%
               | 
               | > _It 's not a ton, but it's not zero. And when it comes
               | to data durability the difference between zero and not
               | zero is usually all that matters._
               | 
               | If your system isn't resilient to 2 in 350,000,000 jobs
               | failing I think there is something wrong with your
               | system.
        
               | [deleted]
        
               | phamilton wrote:
               | This isn't about 2 in 350,000,000 jobs failing. It's
               | about 2 jobs disappearing entirely.
               | 
               | It's not reliability we're talking about, it's about
               | durability. For reference, S3 has eleven 9s of
               | durability.
               | 
               | Every major queuing system solves this problem. RabbitMQ
               | uses unacknowledged messages which are pinned to a tcp
               | connection, so when that connection drops before
               | acknowledging them they get picked up by another worker.
               | SQS uses visibility timeouts, where if the message hasn't
               | been successfully processed within a time frame it's made
               | available to other workers. Sidekiq free edition chooses
               | not to solve it. And that's a fine stance for a free
               | product, but just one I wish was made clearer.
        
             | aqme28 wrote:
             | When we used Sidekiq in production, not only did I never
             | see crashes that lost us jobs, but there are also ways to
             | protect yourself from that. I highly recommend writing your
             | jobs to be idempotent.
        
               | pselbert wrote:
               | Jobs may crash due to VM issues or OOM problems. The more
               | common cause of "orphans" is when the VM restarts and
               | jobs can't finish during the shutdown period.
        
               | phamilton wrote:
               | Idempotence doesn't solve this problem. The jobs are all
               | idempotent. The problem is that jobs will never be
               | retried if a crash occurs.
               | 
               | This doesn't happen at a high rate, but it happens more
               | than zero times per week for us. We pay for Sidekiq Pro
               | and have superfetch enabled so we are protected. If we
               | didn't do so we'd need to create some additional infra to
               | detect jobs that were never properly run and re-run them.
        
               | ransackdev wrote:
               | Or install an opensource gem[1] that recreates the
               | functionality using the same redis rpoplpush[2] command
               | 
               | [1] https://gitlab.com/gitlab-org/ruby/gems/sidekiq-
               | reliable-fet...
               | 
               | [2] https://redis.io/commands/rpoplpush/#pattern-
               | reliable-queue
        
               | aqme28 wrote:
               | Fair enough about idempotence.
               | 
               | I'm still confused about what you're saying though.
               | You're saying that the language of "enhanced reliability"
               | doesn't reflect losing 2 jobs over about 50*7 million
               | (from your other comment)?
               | 
               | And that if you didn't pay for the service, you'd have to
               | add some checks to make up for this?
               | 
               | That all seems incredibly reasonable to me.
        
               | danenania wrote:
               | Crashes are under your control though. They're not caused
               | by sidekiq. And you could always add your own crash
               | recovery logic, as you say. To me that makes it a
               | reasonable candidate for a pro feature.
               | 
               | It's hard to get this right though. No matter where the
               | line gets drawn, free users will complain that they don't
               | get _everything_ for free.
        
               | Mavvie wrote:
               | How are crashes under your control? Again they aren't
               | talking about uncaught exceptions, but crashes. So maybe
               | the server gets unplugged, the network disconnects, etc.
        
               | danenania wrote:
               | To me 'crash' means any unexpected termination, whether
               | it's caused by an uncaught exception, OOM, or
               | hardware/network issues.
               | 
               | I guess you can say that hardware issues on your host
               | aren't under your control, but it's under your control to
               | find a host that doesn't have these issues. And not even
               | a full-on ACID database is going to be 100% reliable if
               | you yank the power cord at the wrong moment.
        
               | Mavvie wrote:
               | I hope my tone doesn't come across as rude or too
               | argumentative, but I think your understanding is a bit
               | inaccurate.
               | 
               | > it's under your control to find a host that doesn't
               | have these issues
               | 
               | All hosts will have these issues, the only question is
               | how often. If you need 100% consistency, then you can't
               | use the free Sidekiq. Personally, I've never needed
               | Sidekiq pro (as these kinds of crashes are extremely
               | rare). But this will depend on your scale and use case.
               | 
               | > And not even a full-on ACID database is going to be
               | 100% reliable if you yank the power cord at the wrong
               | moment
               | 
               | This is only true if there's bugs in the DB, or some
               | underlying disk corruption happens. The whole point of an
               | ACID database is that they're atomic, durable, and
               | consistent, even in the worst case scenario. If a power
               | failure corrupted my SQL database I would feel very
               | betrayed by the database.
        
               | danenania wrote:
               | It wouldn't be corrupted, but in-flight transactions
               | could fail to commit, just like queued jobs can be lost
               | with sidekiq. The failure modes are similar.
               | 
               | I take your point that at a certain scale, hardware
               | failure is inevitable, but if you're running that many
               | servers, you can afford sidekiq's enterprise plan. It's
               | not something that will realistically happen if you're
               | just running like 20 instances on AWS. It's perfectly
               | reasonable to charge extra for something only large
               | organizations with huge infrastructure budgets need.
        
             | arkasan wrote:
             | I wish this was prominently documented. Most people new to
             | Sidekiq have no idea that the job will be lost forever if
             | you simply hard kill the worker. I have seen a couple of
             | instances where the team had Sidekiq Pro, but they had not
             | enabled reliable fetch because they were unaware of this
             | problem
        
             | tebbers wrote:
             | Exactly why we refuse to use Sidekiq. "Hey, you have to pay
             | to guarantee your jobs won't just vanish".
             | 
             | No thanks.
        
         | the_gastropod wrote:
         | To be fair to Mike, Sidekiq is absolutely free. He sells an
         | enterprise version for money, that comes with support.
        
           | 1123581321 wrote:
           | And he only started because companies were telling him it
           | would be easier if they could just pay him.
        
             | toomanyrichies wrote:
             | This is great. Reminds me of the Derek Sivers post [1],
             | "Don't start a business until people are asking you to."
             | 
             | 1. https://sive.rs/asking
        
               | mcsniff wrote:
               | Sorry, this is bogus.
               | 
               | "If I had asked people what they wanted, they would have
               | said faster horses." or whatever the quote is.
               | 
               | There are tons of businesses selling products that are
               | ideas brought to life from scratching their own itch or
               | simply a desire to make something and put it out there.
               | 
               | Personally, I am one of those people who started a
               | business based on an idea with no validation before
               | launching it.
               | 
               | I built it in its entirety, then went to places and
               | people who I expected would want it and low-and-behold, I
               | am making a living doing it.
        
               | toomanyrichies wrote:
               | > There are tons of businesses selling products that are
               | ideas brought to life from scratching their own itch or
               | simply a desire to make something and put it out there.
               | 
               | I'd bet money that the number of businesses which fail
               | because they boil down to "a solution in search of a
               | problem" is vastly larger than the number of businesses
               | that succeeded despite performing "no validation".
               | 
               | That said, "making something" and "starting a business"
               | are two different things. I would challenge you to point
               | out where in the post he argues against _making
               | something_ , especially for the reasons you mention.
               | 
               | > I am one of those people who started a business based
               | on an idea with no validation before launching it. I
               | built it in its entirety, then went to places and people
               | who I expected would want it and low-and-behold, I am
               | making a living doing it.
               | 
               | Consider the possibility that you're in the minority
               | there, and that you succeeded _despite_ performing no
               | validation.
               | 
               | > Sorry, this is bogus.
               | 
               | So if it doesn't apply to you personally, or in all
               | cases, then you dismiss it as "bogus", full stop? Are you
               | in the habit of doing this often?
               | 
               | Also, for future reference, it's "lo-and-behold", not
               | "low-and-behold". [1]
               | 
               | 1. https://en.wiktionary.org/wiki/lo_and_behold
        
               | mcsniff wrote:
               | > That said, "making something" and "starting a business"
               | are two different things. I would challenge you to point
               | out where in the post he argues against making something,
               | especially for the reasons you mention.
               | 
               | The author states up directly, "Don't make a website or
               | an app. Don't build a system".
               | 
               | Starting a business doesn't have to follow any real
               | "formula". It can be a step in the beginning, middle, or
               | end of a process. Yes, you should have the ingredients
               | for a cake before you bake it, but you don't need to find
               | someone who will eat your cake before you bake one or
               | offer it for sale and you sure as shit don't need to
               | "find real people whose problem you can solve. You listen
               | deeply to find their dream scenario."
               | 
               | > Consider the possibility that you're in the minority
               | there, and that you succeeded despite performing no
               | validation, rather than because of it.
               | 
               | While I never claimed it was due to not performing
               | validation, we can clarify that yes, it is not due to
               | this, it is despite not doing it. Validation itself can
               | be found in successful sales or other means, it does not
               | need to be done pre-market and there are many examples of
               | this, aside from the horses quote I provided.
               | 
               | And yes, I, in the same way the author declares it,
               | declare it as bogus because these rules do not need to be
               | followed in the way the author claims.
               | 
               | The post is riddled with questionable content, IMO, made
               | to hit the wannapreneur market.
               | 
               | I don't dare tell someone how to start a business. It's
               | their business, it's their journey, they should do it how
               | they want.
        
             | bombcar wrote:
             | Anyone who has a free thing, sell _something_ that produces
             | an expendable invoice or receipt. Makes it easy to use
             | company funds to pay for company work. "Buy me a coffee"
             | buttons don't really cut it.
        
       | JustLurking2022 wrote:
       | It's always interesting to find out about these niche
       | subcultures. Having worked with batch schedulers of all varieties
       | for a couple decades, I've never run across Sidekiq but, then
       | again, I didn't realize anyone had actually built anything in
       | Ruby in the past decade.
        
       | sandstrom wrote:
       | Sidekiq Pro is great, we're paying for it! 10k a year I think.
       | 
       | But for people who are interested in alternatives, I'd also
       | suggest Good Job (runs on Postgresql).
       | 
       | https://github.com/bensheldon/good_job
        
       | adrianthedev wrote:
       | Mike is an inspiration to me and my project!
        
         | ezekg wrote:
         | Same. He's always been a role model for my business as well,
         | especially when I was just starting out. My business uses
         | Sidekiq every day. It really is a great piece of software. He's
         | also one of the reasons I think open source software can be
         | highly profitable if people just figure out a business model
         | that works.
        
       | sickcodebruh wrote:
       | Sidekiq is one of my favorite things about using Ruby, I include
       | it in my short list every time a "Why use Ruby?" question gets
       | asked. I miss it desperately when I work in other languages. I
       | plan on giving Faktory a shot ASAP.
       | 
       | Mike has always struck me as a great guy, really the kind of
       | person who you're happy to know is building one of your favorite
       | tools. In a world of starving open source contributors and mega
       | corps throwing around weight, his success with Sidekiq stands
       | out. It makes me very happy to see.
        
       | shubhamjain wrote:
       | This is one of the best businesses I have heard of. Even 6-7
       | years back, Sidekiq was grossing $80k/month [1]. I imagine it
       | must be much more now. No servers to maintain, no employees,
       | minimal support work and Mike has the complete freedom to work on
       | updates whenever he prefers. Almost entire revenue minus payment
       | processing costs must be profit. Imagine making $1M / yr working
       | only 10-20hrs per week (Don't wish to presume here, but that's my
       | estimate of the man-hours it costs to run).
       | 
       | > I still have 0 employees and don't plan to hire. I tune my
       | business processes to run as lean as possible: Most of my
       | customers are on credit card so their payments are automatic. The
       | gem servers take about one day of maintenance per year. I can't
       | really outsource much of my support work because it is so
       | technical and specialized.
       | 
       | > My gem server is a $6 droplet on DigitalOcean. Because gems are
       | just static files, that little droplet can handle millions of
       | requests per day with just Apache. Oh, and I run three servers in
       | parallel for failover purposes for a grand total of $18/mo.
       | 
       | I wonder what makes Sidekiq special? I don't imagine any
       | equivalent product (background job processing) in the other
       | languages is raking in that much, if making any revenue in the
       | first place.
       | 
       | [1]: https://www.indiehackers.com/product/sidekiq
        
         | pselbert wrote:
         | > I wonder what makes Sidekiq special?
         | 
         | Time, know-how, and long term dedication are the key
         | ingredients from my perspective. Maybe he's working 10-20 hours
         | now, but there's support and development every day for the past
         | 11 years.
         | 
         | > I don't imagine any equivalent product (background job
         | processing) in the other languages is raking in that much, if
         | making any revenue in the first place.
         | 
         | I guarantee, there are background job processors in other
         | languages making revenue.
        
           | pmarreck wrote:
           | https://getoban.pro/ would like to have a word... It's
           | apparently making good money
        
           | pmarreck wrote:
           | > I guarantee, there are background job processors in other
           | languages making revenue.
           | 
           | I had no idea until someone just hinted me that this was
           | self-referential... LOL, apologies for the now-embarrassing
           | other comment I made LOL (I only know you as "sorentwo",
           | whoops!)
        
         | mtlynch wrote:
         | In 2017, Sidekiq was generating over $1M/yr in revenue.[0] It
         | sounds like his costs are basically nil, so he's living the
         | dream.
         | 
         | [0] https://www.indiehackers.com/podcast/016-mike-perham-of-
         | side...
        
         | EastSmith wrote:
         | > I can't really outsource much of my support work because it
         | is so technical and specialized.
         | 
         | Yeah, I had a Sidekiq question on StackOverflow and Mike Perham
         | answered himself couple of days later.
        
         | sparker72678 wrote:
         | Sidekiq is special because it's crazy performant, and it
         | _works_.
         | 
         | Mike has built a system that's rock solid, and he doesn't
         | twiddle around with it willy nilly. He keeps it super stable.
         | 
         | The people paying for it (I'm one of those people) are paying
         | for the reliability, in addition to the features.
         | 
         | Mike's also managed to find a real sweet-spot with the features
         | he holds out for Pro/Enterprise. The stratification is _just_
         | right to nudge you up, but it always feels like you 're getting
         | a good deal when you pay.
        
         | princevegeta89 wrote:
         | Just like the underlying platform it was built for (Rails) - it
         | is so stupidly simple to deploy Sidekiq. Performance is great
         | and a lot of complexity is well hidden. This makes it a great
         | product overall.
        
         | iudqnolq wrote:
         | Oban is a roughly equivalent elixir library. They claim to have
         | hundreds of customers and their cheapest plan is $500/yr, so
         | maybe they make an order of magnitude less? Considering the
         | relative language popularity that seems pretty good.
        
         | mperham wrote:
         | Hangfire and Oban are two other background job systems which
         | have a commercial aspect. AFAIK Hangfire has been around almost
         | as long as Sidekiq and is still actively supported.
         | 
         | I'm closer to $10m than $1m in annual revenue now.
         | 
         | My take on Sidekiq's secret sauce: a job system is a
         | distributed system. Most of Sidekiq's commercial features are
         | available as OSS gems but the complexity sneaks up on you as
         | you integrate 3-6 of those features together. Building your own
         | almost always leads to a worse system than the mature, well-
         | debugged system which I have curated.
        
           | alberth wrote:
           | Super excited of you.
           | 
           | - Do you have any outside hired help? I see you still have no
           | employees, but do you contract with anyone to do customer
           | support as an example?
           | 
           | - How many approx customers do you have these days? $10M
           | revenues = 10,000 customers. Is that roughly correct, if so -
           | wahoo, congrats.
        
             | mperham wrote:
             | I'm closer to 2000 customers.
        
               | aaronds wrote:
               | That is absolutely absurd that you have built something
               | many have tried and failed to do with millions of dollars
               | of venture capital behind them, all on your own.
               | 
               | Genuine kudos to you, you should be an inspiration to any
               | indie hacker.
        
               | sahila wrote:
               | Part of the problem with venture funding is 10m arr
               | wouldn't be considered enough.
        
               | aaronds wrote:
               | Totally. But regardless lots of ideas get funded that
               | turn out not to be "venture scale" and many at an early
               | stage that do not even get to $10m ARR.
        
       | pmarreck wrote:
       | Spoke with Mike at a couple of Railsconfs a few years ago (before
       | I got into Elixir). Really great guy.
        
       | davidw wrote:
       | He's also a standup guy in terms of contributing back to worthy
       | things here in Oregon.
        
       | jack_riminton wrote:
       | "I toyed with Sidekiq.js but decided to kill that idea real quick
       | because, as we all know, JavaScript is terrible"
       | 
       | This is why I love the ruby community, so much sense :)
        
         | rektide wrote:
         | From the JS community, this is sadly the level of snark we
         | expect.
         | 
         | It doesn't have to be like this. Your community tried to be
         | better once. Have you forgotten?
         | 
         | https://jasonfleetwoodboldt.com/courses/stepping-up-rails/ma...
        
           | brigandish wrote:
           | Matz is nice but that culture's definitely not coming back,
           | anymore than the kind of fun and curiosity that _why brought
           | to us. Maybe it's inevitable as communities grow and people
           | taste success?
           | 
           | Regardless, it's probably better if we leave room for little
           | jokes with each other.
        
             | rektide wrote:
             | As someone who quite likes js & our wild teaming ecosystem
             | a lot, I can also say: we definitely deserve some/mamy
             | jokes too. No one's wrong on that. (jokes are good!)
             | 
             | I wish they felt like they had some punchlines though. No
             | one ever bothers to make the JS world laugh along. We know
             | it's wild here (Come play! So much fun freedom!). It comes
             | off more like a beat down.
             | 
             | Context also matters. Conversationally Mike's words could
             | be an amusing wink & grin quip. I can see that. On paper, &
             | seeing it repeated with the same reckless unnuanced
             | antipathy, it lacks the personal connection & feels
             | indicative of a general attitude situation that is quite
             | prevalent.
             | 
             | Again I think there's plenty of valid negativities in js,
             | but looking at the distribution of where folks fall on the
             | alignment chart when they talk about JS issues, it concerns
             | me how lopsidedly & with what casual acceptance folks tend
             | towards the scariest boxes of the chart. To me we are all
             | in the challenge of making computing better together, & we
             | can help ourselves by helping others.
        
           | danielrhodes wrote:
           | There seems to be an ever-present high-level of defensiveness
           | from the Ruby community over JS/React. Rails has had a
           | profound impact on web development, promoting fast starts and
           | shipping quickly. Companies like Shopify and Twitter
           | benefited greatly from this. But the framework is 18 years
           | old. The web that it was created for has changed
           | significantly.
        
             | ghiculescu wrote:
             | It's changing back. SPAs are on the way out. Check back in
             | 5 or 10 years - Rails will still be here.
        
             | bradgessler wrote:
             | I think there's two reasons for that:
             | 
             | 1. When deploying a Rails app, the JS asset compilation is
             | always the slowest part and is the most likely to break.
             | 
             | It doesn't help that Rails has made a complete mess of JS
             | assets, which I wrote about at https://fly.io/ruby-
             | dispatch/making-sense-of-rails-assets/
             | 
             | 2. For people who had to ship a Rails API + JS SPA, their
             | workflow felt slow, brittle, and cumbersome. It wasn't
             | their imagination either--testing the stack required
             | integration tests, which are always slow. Maintaining an
             | HTTP API to talk to the SPA is additional effort that's not
             | needed, which Hotwired has demonstrated clearly.
             | 
             | I still think Rails has a lot of fuel left in its tank,
             | thanks to Hotwired and the big companies behind it, but I
             | agree the "Rails is the most productive framework" gets way
             | overplayed. It was def "most productive" 18 years ago, but
             | most other modern frameworks took notice, caught up, and
             | have even surpassed Rails in a lot of ways.
             | 
             | The Ruby runtime leaves a lot to desire when you compare it
             | to runtimes like Elixir/BEAM, Go, etc. I also think Rails
             | has a terrible view layer, but most folks don't quite
             | understand that that means yet. This is something I'm
             | working on at the moment.
        
               | danielrhodes wrote:
               | The Rails view layer used to be quite nice at its peak.
               | Way better than many of the alternatives. That you could
               | execute actual code inside a view was just magical.
        
           | jack_riminton wrote:
           | The other thing I like about the ruby community is the sense
           | of humour
        
           | pmarreck wrote:
           | You act as if some percentage less than 100% of Ruby users
           | have extensive experience with JS as well...
           | 
           | OK, maybe it's only, say, 96% of Ruby users, or 100% of Rails
           | users at least
        
             | rektide wrote:
             | See like, this isn't constructive maligning at all, it's
             | more undirected blanket unniceness.
             | 
             | It costs nothing to actually put down a reason for being
             | upset, versus having totally generic downputs. Very few
             | things are truly rotten to the core, most bad things have
             | some bad aspects but could be much better if ___. If
             | something is rotten to the core the central articles of
             | faith for why that's so should be declared.
             | 
             | Plenty of Ruby folks have gone on to do great friendly
             | Rails ish JS works. Ember.js is very batteries included,
             | tries to show that yes all the potential is there to pave a
             | nice well integrated happy-path system. To assume misery
             | seems unreasonable; many have done fine.
             | 
             | I think we have a real obligation to do better to ourselves
             | & one another than to foster _shallow_ prejudices. Trump in
             | his April 11th Tucker Carlson interview was asked why he
             | thought Dems weren 't worried about nuclear weapons.
             | "That's because they don't understand life. That's because
             | they don't understand what it is that you have to
             | understand." This is an irrefutable claim. There's no point
             | to start discussing here, no possibility that the other
             | side might change or have some nuances. Let's not do this.
             | Let's rise to higher places where we take real appraising
             | concerned looks at things, rather than just dismiss stuff
             | out of hand. We don't even have to be nice, but let's at
             | least strive to be somewhat useful.
        
               | pmarreck wrote:
               | > It costs nothing to actually put down a reason for
               | being upset, versus having totally generic downputs
               | 
               | Actually, it does cost something- time and effort- but
               | thanks to the latest AI, I can cut some of that out right
               | now:
               | 
               | As an Elixir enthusiast, I'd like to point out some
               | technical criticisms of JavaScript and its ecosystem,
               | particularly in comparison to Elixir's approach to
               | dependency management and community.
               | 
               | A) Dependency bloat: The JavaScript ecosystem, especially
               | when working with Node.js, often suffers from excessive
               | dependencies. Even when you require just a few
               | dependencies for your project, you may end up pulling in
               | a large number of indirect dependencies. This can lead to
               | increased complexity, slower build times, a larger attack
               | surface for potential security vulnerabilities, and an
               | ever-growing workload spent applying security fixes that
               | have nothing to directly do with the purpose of the web
               | app.
               | 
               | In contrast, Elixir's dependency management system,
               | powered by Mix and Hex, encourages a more conservative
               | approach. Elixir libraries are often designed with
               | minimal dependencies, and the community values self-
               | contained, focused libraries.
               | 
               | B) Security concerns: The extensive use of third-party
               | packages in JavaScript projects can expose your
               | application to security risks. When you pull in a large
               | number of packages, you become responsible for ensuring
               | that all of those dependencies are up-to-date and secure.
               | 
               | Elixir's ecosystem tends to have fewer dependencies,
               | reducing the potential attack surface. Additionally,
               | Elixir's focus on immutability and the actor model can
               | help minimize the impact of security vulnerabilities.
               | 
               | C) Lack of native concurrency and parallelism: JavaScript
               | is single-threaded by design, which can limit its ability
               | to take full advantage of multi-core systems. While
               | Node.js introduced asynchronous I/O to help mitigate this
               | issue, it can still be challenging to build highly
               | concurrent applications in JavaScript.
               | 
               | Elixir, built on the Erlang VM (BEAM), provides excellent
               | support for concurrency and parallelism through
               | lightweight processes, message-passing, and the actor
               | model. This allows Elixir applications to scale across
               | multiple cores and handle a large number of simultaneous
               | connections more efficiently than most JavaScript
               | applications.
               | 
               | D) Callback hell and async/await complexity: JavaScript
               | has traditionally relied on callbacks for asynchronous
               | programming, which can lead to a phenomenon known as
               | "callback hell" when dealing with nested callbacks. While
               | the introduction of async/await has improved this
               | situation, it can still be cumbersome and confusing for
               | developers.
               | 
               | Elixir offers a cleaner approach to concurrency with its
               | process-based model and message-passing mechanism,
               | enabling easier-to-read and maintainable code.
               | 
               | E) Mutable data- One of the key differences between
               | Elixir and JavaScript is the way they handle data. Elixir
               | enforces immutability, meaning that once a data structure
               | is created, it cannot be modified. Instead, operations on
               | data structures in Elixir return new versions of the
               | data, leaving the original untouched. This approach
               | offers several advantages compared to JavaScript's
               | mutable data structures:                 1)
               | Predictability and easier reasoning: Immutability in
               | Elixir makes it easier to reason about and understand
               | your code. Since data structures cannot be changed once
               | created, you don't have to worry about unintended side
               | effects or data being altered in unexpected ways. This
               | results in more predictable and maintainable code.
               | 2) Concurrency safety: Elixir's immutable data structures
               | simplify concurrent programming by eliminating the need
               | for locks, mutexes, or other synchronization primitives.
               | This is because multiple processes can safely read and
               | share the same data without the risk of data corruption
               | due to concurrent modifications. In JavaScript, managing
               | shared mutable data in concurrent scenarios can be error-
               | prone and challenging.            3) Functional
               | programming: Immutability is a core principle of
               | functional programming, and Elixir is heavily influenced
               | by this paradigm. Functional programming promotes the use
               | of pure functions that do not produce side effects, which
               | can make code more modular, reusable, and easier to test.
               | While JavaScript supports functional programming
               | concepts, its mutable data structures can make it more
               | challenging to adhere to functional programming
               | principles.            4) Reduced cognitive load:
               | Immutable data in Elixir means that developers don't have
               | to keep as much track of changing state as they read or
               | write code. This can make it easier to understand the
               | flow of data and logic in your application, leading to a
               | more pleasant and efficient development experience and
               | ultimately, fewer bugs generated per LOC.
               | 
               | F) Community values: The JavaScript community is known
               | for its rapid pace of change and the constant
               | introduction of new libraries, frameworks, and tools.
               | While this can drive innovation, it can also lead to
               | fragmentation and inconsistency across projects.
               | 
               | The Elixir community tends to be more focused on
               | stability, long-term support, and collaboration. This can
               | result in a more consistent and cohesive ecosystem, where
               | tools and libraries are more likely to work together
               | seamlessly.
               | 
               | In conclusion, while JavaScript has its strengths and has
               | undoubtedly played a vital role in the growth of web
               | development, its dependency management and ecosystem can
               | be seen as less than ideal from an Elixir enthusiast's
               | perspective. Elixir's dependency management system, focus
               | on concurrency, and community values offer a more robust,
               | sane and secure alternative.
               | 
               | (How's that for "actually putting down a reason" as to
               | why Javascript is terrible? Hey, you asked!)
        
               | rektide wrote:
               | Works for me! Very much matches the MO I've been using as
               | "JS is wild, ain't it great!," so I tend to agree with
               | the shown perspective.
               | 
               | I also think a huge amount of these tend to be pretty
               | typical conservative-developer overconcern (see Yegge's
               | Notes From The Mystery Machine Bus
               | https://gist.github.com/cornchz/3313150), governing
               | yourself on fear, that is probably not really as fully
               | warranted or deserved.
               | 
               | But I'm also a huge fan of wild & fun & diversity. I also
               | love that we try & do other things, that programming
               | languages are not a Last Man Standing situation, & that
               | we have great technical ecosystems with caring trying
               | folks finding new ways to move forward & progress like
               | Elixer. I look forward to seeing what lessons there prove
               | really valuable (and perhaps aping them)! It's a choice
               | in JS world but I do use immutable.js, for example, and
               | it's great & as described as an advantage above. Ditto
               | for some fp tools, but often I will mutate & use
               | effectual/imperative styles, I often find there are
               | significant performance or understandabity wins.
               | 
               | I would say, yes, the cost of talking vs snarking may be
               | real, but it doesn't have to be this large & well
               | examined a list as you've madd. I don't like JS, the
               | amount of dependencies terrifies me. I don't like JS,
               | it's too fragmented. I'd rather use Elixer, I like having
               | a good actor model underpinning my ecosystem. Sharing
               | some sort of tidbit can help calibrate where a person is
               | & turn destructive contagious negativity into healthy
               | discourse.
        
               | jack_riminton wrote:
               | I think you're taking this way too seriously, it was just
               | a blogger having a little lighthearted jab
        
               | rektide wrote:
               | Both agree in this case with Mike's right to fun, but
               | also, I feel like the idea of lighthearted jabs has
               | become a steady stream of blows. I said elsewhere:
               | 
               | > _Context also matters. Conversationally Mike 's words
               | could be an amusing wink & grin quip. I can see that. On
               | paper, & seeing it repeated with the same reckless
               | unnuanced antipathy, it lacks the personal connection &
               | feels indicative of a general attitude situation that is
               | quite prevalent._
               | 
               | "Don't get so upset it's just a joke" is sometimes indeed
               | a legit statement, sometimes we do take things too
               | seriously & need to be reminded. But when the light jabs
               | keep coming, when there's so rarely an attempt to ever
               | bring both parties into the laughing, when it's always
               | jokes at expense, the action whatever it's intent becomes
               | part of a larger behavior that is more than a
               | lighthearted jab.
               | 
               | How many folks would stand up and say, no, there is no
               | pattern of behavior about JS receiving short shift put
               | downs? Do folks think there is no issue? How above board
               | Vs how trashy do we think we've gotten with how
               | programmer culture especially those parts that don't like
               | it treats JS? What other parts of programmer culture
               | endure repeated joke making at their expense today?
        
               | thaumasiotes wrote:
               | > How many folks would stand up and say, no, there is no
               | pattern of behavior about JS receiving short shift put
               | downs? Do folks think there is no issue?
               | 
               | If you identify with JavaScript so strongly that you'll
               | go over to message boards and rend your garments when you
               | see people making fun of it, and you consider it a big
               | problem that you have to do this so often... maybe
               | consider whether there are some faults in JavaScript that
               | lead it to attract a steady stream of mockery?
               | 
               | > What other parts of programmer culture endure repeated
               | joke making at their expense today?
               | 
               | All of them. Programmers are an unpopular group.
        
         | camdenreslink wrote:
         | I wouldn't be so sure. They invented coffeescript in response
         | to not liking JavaScript.
        
       ___________________________________________________________________
       (page generated 2023-04-14 23:01 UTC)