11 ms·
Reflections on Using Haskell for My Startup
- leonsegal 6y agoWhat if the project became popular, scaled up and the original developer needed help with it? As Haskell is a niche language, wouldn't it be harder to find Haskell developers to come on board?
- Vosporos 6y agoThis would mean that whatever the level of the contributors, it would be harder to ship bugs in production.
- izgzhen 6y agoI guess if the business idea really took off, then it doesn't really matter what language is this part of logic written in -- you can already wrap it in as a service with Web API -- or simply rewrote it in another more popular language.
- The_rationalist 6y agoNot all startups bring big VC money, for the real world a full rewrite of your stack usually cost too much to be viable.
- _query 6y agoOur company is also using a lot of haskell for our projects. Since we adopted haskell we had a lot more very talented developers apply. I think this only might be a problem if you don't want to hire remote.
- dgellow 6y agoYes, it is harder to find developers for niche languages and technologies. On the other hand you have a pool of enthusiasts looking for the opportunity to use something more niche, like Haskell.
- cies 6y agoThis argument + response keep coming up. If a niche language could never pick up steam we'd still be stuck with assembly. All languages started off as niche. It's more interesting what constitutes niche, AND as the parent notes what constitutes a "language to have enthousiasm for". VB, JScript, ActionScript, ColdFusion and BASIC are all niche (nowadays), but without enthusiasm its not interesting. Besides the niche-enthusiasm, there is also something for "usefulness". Haskell+ecosystem (and others in the FP camp) bring a nice set of features to the table not often found in other languages.
- that_guy_iain 6y ago> This argument + response keep coming up. If a niche language could never pick up steam we'd still be stuck with assembly. All languages started off as niche. No they didn't all start off as a niche. They started off with a small user base of early adopters. Haskell is a niche because it's been around long enough to pick up users. There is a difference between a new language with a small number of early adopters and a niche language that has been around for decades. And languages like Swift did not start off small.
- cies 6y agoYou're right. A niche is not built in a day.
- jcelerier 6y ago> All languages started off as niche. definitely not. Java was presented at SunWorld. When C# came out there were ads in computer programming zines. Swift came out on a wide concert stage with most of the Apple community having their eyes riveted on the video stream: https://youtu.be/MO7Ta0DvEWA?t=45 https://youtu.be/MO7Ta0DvEWA?t=45 All that ensures that the "critical mass" adoption to get the language out of niche status would be a non-issue
- cies 6y agoEven those languages start off with a small user base, right? And some return to small user bases :) I think the number of VB programmers has drop to level below Haskell nowadays.
- seddona 6y agoOur startup runs on Haskell. I was worried about this initially but in practice finding great Haskell developers has been no more or less difficult than finding great developers in general.
- otabdeveloper4 6y agoYeah, finding a decent Javascript or C++ developer is actually very difficult - everyone thinks they know C++ and Javascript when in fact only a small minority actually do.
- MadeThisToReply 6y agoI don't know about Haskell specifically, but the question isn't "how many developers are able and willing to work with $language?" but "how many developers are able and willing to work with $language relative to the number of companies hiring for it?". For example, Elm is still a tiny, niche language, but from what I hear it's relatively easy to hire for Elm because there are many more people who want to work with it than there are companies that are hiring for it.
- zumu 6y agoThe talent pool is probably smaller, but passionate. It's many people's dream to write Haskell (or other FP) for a living, myself included. If I may shill, if anyone is hiring for Haskell or FP roles, please let me know.
- exdsq 6y agoIOHK are, and have some fairly team members in the Haskell community :) https://apply.workable.com/io-global/ https://apply.workable.com/io-global/ https://iohk.io/en/team/ https://iohk.io/en/team/
- _query 6y agoAt digitally induced we're always looking for great developers to add to our haskell team: https://www.digitallyinduced.com/JobPositions https://www.digitallyinduced.com/JobPositions :)
- agentultra 6y agoIn my experience, no. There are probably more people who use Haskell or want to use Haskell as their main language than there are job openings to work on a Haskell code base. If you're willing to work with a remote team your inbox will probably never sit empty.
- izgzhen 6y agoGitHub offered something called Dependabot -- and the point I want to make here is that I've see SOOOOO many semi-active projects (like, dozens of stars and some downstream users) which just ignore the PRs opened by Dependabot. These maintainers don't even switch off Dependabot, not to say merge the PRs that updates dependencies with potential security risk. And it bothers me a lot....
- dmitriid 6y ago> which just ignore the PRs opened by Dependabot. For JS Dependabot becomes a spammer, because there are just so many packages even in a "hello, world" project. In one of my projects I just gave up and set up auto-approve/auto-merge on minor updates. This is what the commit history looks like: https://i.imgur.com/cC7h7T7.png https://i.imgur.com/cC7h7T7.png And there are 20 more major ones waiting for resolution. My hunch is that in many projects devs just on't have the capacity to deal with the deluge.
- realusername 6y agoKeeping up with a node project is an impossible task, you would have to dedicate one full time developer just for doing upgrades. There are daily updates and a lot of them will just break your code due to the poor testing culture & lack of backward compatibility.
- danpalmer 6y agoThis is absolutely it. For JS we only use it for security fixes now on my team because it was creating too much work otherwise. My personal blog is Gatsby (a decision I now regret somewhat), and gets a couple of Dependabot PRs a day which is ridiculous.
- ssijak 6y agoSo, to summarise: - It is an accomplishment if you get your basic project setupped in 2 weeks - It is very hard to make popular libraries work together - 1/3 of the popular libraries are not well maintained, there are no docs and maintainers do not reply to PRs - It is hard to use latest GHC versions because of the previous problem - It is hard to get additional devs - Compile times are ok-ayish but can be a pain - There is no good IDE and refactoring But it is still somehow "the best general purpose language"? And don't get me wrong, Haskell is on top of my list of purely functional languages that I would like to learn. BUT, if I want to build an actual app and try to earn money from it I would just use something that is very popular, well maintained, easy to push features, easy to deploy and find additional devs for. For me it is ReactJS on the frontend and Kotlin on the backend. OR it is a jackpot if I could just make it in something like NextJS. Haskell can wait for when I earn enough money with other languages so that I can just play with it and satisfy my own engineering itch without any production expectations I have from other languages.
- yoneda 6y agoOne of my favorite qualities of the Haskell community is how honest they are about the weaknesses of the ecosystem (we often discuss issues like these, e.g., on r/haskell or in mailing lists). These are legitimate concerns, but the fact that the author is happy with their decision despite these drawbacks is a testament to the language itself.
- apples_oranges 6y agoGood point, that's actually also what I sometimes notice. People complain about something, but still use it. I then think: I have to check it out!
- alpaca128 6y agoOr as Bjarne Stroustrup worded it, "There are only two kinds of languages: the ones people complain about and the ones nobody uses" And in fact very detailed criticism can be a good indication that the person is not some beginner frustrated with "that bad feature" but a developer who cares a lot about the technology but is also realistic about the things that aren't as good as they could be.
- te_chris 6y agoThis is a really nice write up and it sounds like you’ve built a solid foundation for the product longer-term. Nice work.
- domano 6y agoExcept for the pyramid of doom (which you can avoid with good architecture) this reads more like "why to use go over haskell" (at least for me as someone familiar with go). I started writing go at the same time i started to work on production with it. In 2 weeks time i had a working service and learned the language, instead of the setup. Interestingly enough the main problem was the pyramid of doom though (due to various http middlewares)! Nowadays i don't have issues with the pyramid of doom. Still it seems that in the long run the benefits are similiar, except for the time it took to build it, so if it was fun i think it was worth it.
- lallysingh 6y agoI use both and am much happier and much, much more productive in Haskell. What they don't cover here are any of the benefits of the language. The abstractions of the language provide an excellent toolkit to express the intent of your code succinctly. That makes it easy to reason about, cheap to maintain, and fast to develop. Go gets you started quickly, but your code will be no more expressive after 5 years of development than at 5 weeks.
- domano 6y agoI would have thought that a change in expressiveness leads to less maintainability, not more. Could you elaborate on that point?
- lallysingh 6y agoNo, the more expressive the language, the more directly you can have the code model the intent within the domain. As the reader sees the intent and function of the code clearly, they can understand and reason about it better. As an example, Either-monadic code automates an error check on every line, immediately returning on the first error. The go equivalent is a ton of mind-numbing "if err != nil" checks between every relevant line of code. The go equivalent is mostly mechanical clutter. But all those LOC still add maintenance. People have to read and check them (no wrong operators, no references to the wrong variables, etc).
- macspoofing 6y agoTooling is so critical to the uptake of a language it surprises me that more effort isn't expanded in that area for more niche languages that want to see their popularity increase. I guess it's a 'chicken-and-egg' problem. Popular languages get tooling investment because they are popular.
- _query 6y agoThe tooling situation has improved a lot in the haskell ecosystem in the last year. E.g. with Haskell Language Server there's now a good and standard way for having autocompletion, etc. inside VSCode and other editors. In the web development space we now have IHP, which is like rails but with type-safety. It's already the second largest haskell framework, even though it was just launched last year: https://ihp.digitallyinduced.com/ https://ihp.digitallyinduced.com/ (Disclaimer: I'm founder of the company that makes IHP)
- tome 6y ago> In the web development space we now have IHP, which is like rails but with type-safety. It's already the second largest haskell framework Second to Yesod, I presume? How do you measure size, as in, what exactly is the quantity you measure, and how do you go about calculating/estimating that quantity?
- _query 6y agoMeasured by GitHub stars, which is a good proxy: https://star-history.t9t.io/#digitallyinduced/ihp&yesodweb/yesod https://star-history.t9t.io/#digitallyinduced/ihp&yesodweb/y... We also have a very active community, e.g. over 100 people in Slack, over 180 in Gitter, over 100 weekly active projects (https://ihp-telemetry.digitallyinduced.com/admin/Events https://ihp-telemetry.digitallyinduced.com/admin/Events <- here's some telemetry)
- tome 6y agoWow, that line is so steep it looks like the number of COVID-19 infections. Congratulations!
- rich_sasha 6y agoWhat scares me about Haskell is that it seems even people who used it extensively for a while call themselves "intermediate", and still find themselves in Haskell-shaped holes. If something breaks and I need to fix it now, I don't want to be fighting with a language that says, "no-o, no shortcuts, use a proper monad", or takes years to master to that level. Maybe I'm just missing the point.
- lallysingh 6y agoHa! Try C++. Usually when someone calls themselves an expert they're either a fool or lying.
- gilmi 6y agoReminds me of the Deep C slides https://www.slideshare.net/olvemaudal/deep-c/255 https://www.slideshare.net/olvemaudal/deep-c/255
- higerordermap 6y agoStroustrup is what?
- lallysingh 6y ago"Usually" and I stand by that.
- thinkharderdev 6y agoI'm not a Haskell user but am a Scala developer and it has the same sort of thing. But I think it is more about the culture than it is about the actual reality of the language. First, it is often a sort of humblebrag (as the kids say). I am using this language that is SO advanced that I am a mere intermediate after X years of development. Looks how smart I am for using it. That tends to lead people to dramatically over-estimate how hard it is to become productive in the language. Second, the emphasis on correctness means that the ecosystem goes to great lengths to explain how all the abstractions work internally and how they are grounded in Category Theory. In other ecosystems (such as Java) they seem to be more focused on talking about the interface and the practicalities of using a library. Spring is extremely complicated but you don't see much ink spilled explaining all the internal implementation details.
- maxrobot 6y agoCame for the the advice, stayed for the memes...
- lupire 6y agoDeadpendency sounds nice, and may be profitable, but it's less a "startup" in the sense of a growth business, and more an indie lifestyle business. It's a GitHub app, like people who sell Word Macros to lawyers. There's a good a chance it would be obsoleted by a small open source project next year.
- christiansakai 6y agoI learned Haskell for a year and went into various books. After that I tried to contribute to a relatively simple open source projects and I realized the real world Haskell is so different than books, then I got discouraged and stop. These days I wanted to pick up Haskell back again, is there any updated resource you can recommend for doing real world Haskell?
- chungus 6y ago>for doing real world Haskell? Haven't read it but there's a book called "Real World Haskell", which I thought was funny considering your question. Right now I'm really enjoying "Functional Design and Architecture"[1] by Alexander Granin (it does assume you've already got some experience). In addition, make sure to revisit Stephen Diehls "What I Wish I Knew When Learning Haskell"[2]. [1] https://leanpub.com/functional-design-and-architecture https://leanpub.com/functional-design-and-architecture [2] http://dev.stephendiehl.com/hask/ http://dev.stephendiehl.com/hask/
- christiansakai 6y agoThe book "Real World Haskell" is outdated. I'll take a look at that functional design and architecture. THanks.
- adamzerner 6y agoI'm currently going through Haskell Programming From First Principles (https://haskellbook.com/ https://haskellbook.com/) and am liking it a lot. It's only been a few weeks so I can't say for sure, but it seems like it's comprehensive enough (1200+ pages) where you'd pick up what you need for real world stuff. To some extent at least; in practice there's probably no substitute for just getting real world experience. PS: Hi Christian! You were a TA when I was a student at Fullstack :)
- jack_riminton 6y agoScratching an intellectual coding itch vs starting a successful startup seem to be mutually exclusive
- hcarvalhoalves 6y ago> (...) making my types strict by default with the StrictData extension. Additionally, Haskell has lazy linked lists as the default list type. Instead I used a strict list type. Is this the norm for production-ready Haskell codebase - basically throw away laziness?
- WraithM 6y agoNo
- bweitzman 6y agoStrict by default is becoming increasingly popular in production. It makes programs behave a lot more predictably for many common use cases. Extensions are enabled on a module by module basis so if you turn on strictness by default, you can still opt in to laziness if you have certain data structures/algorithms that rely on it.
- selljamhere 6y ago> So after about 8 months of work I was ready to start getting users. I caution readers looking for advise on building a start up. Early on, this reads as a post celebrating the joy of programming. Which is great! Working on something you enjoy can be personally fulfilling, but that doesn't mean that it's a start up. At the end of the day, a start up is a business, and a business needs to make money. The ultimate validation is finding users willing to pay for your service. Waiting 8 months before finding users is a huge risk, and signals that this is is a fun personal project that may generate profit if it happens to find product/market fit. The author's closing remarks address the idea, but I think they're a little late for a post about building startups. > Have I spent too much time geeking out on Haskell and not enough time thinking about the idea? I guess we will see .
- gravypod 6y agoStep 1: build something and have fun doing it. Step 2: post something slightly decisive on HN that mentions your product and use case at least 1 time. Step 3: monitor conversions, wait for signups. Step 4 (optional): repeat This obviously isn't bad. I enjoyrd the reading and honestly deadpendancy seems very useful and I'd have never heard of it if not for this post.
- tasubotadas 6y agoIt just looks like using language like Scala would have been so much more productive.
- asimjalis 6y agoI was curious how Haskell helped with the peculiar challenges of building a startup. Did it make it easier to validate business ideas and pivot over time towards profit compared to other languages?
- barry27 6y agoYou say inactive, I say finished