1. 15

What goes into this decision for you guys?

I know there are different styles. I like to use an existing solution when I can and (in the rare case when there isn’t one like for a remote debugger (https://github.com/dopatraman/remotedebugger)) i will try to design a solution myself. I know “the best way to develop something is to not develop it”, but when are the exceptions? If you guys do roll your own, what is your system for maintaining the code?


  2. 11

    I think that when you’re thinking about these kinds of problems, you should really understand the amount of time worth spending on research. For instance, suppose you think it’ll take a month to develop the project from scratch. You should probably spend at least 40 full hours reading about existing systems before starting development.

    Another thing to consider is that most systems are the combination of some compute layer, some data layer, and some messaging/transport layer. Everything from databases, to websites, to mapreduce frameworks can fit in this abstract model. You can apply this to your project by thinking about what communication patterns exist internally, how you want to be able to query and access your data, and what computations you’re running. These considerations can help you realize that seemingly unrelated projects get you 90% of the way to your solution!

    1. 3

      Depends on my need, what’s required to make it and stuff like that. If it’s something simple I might make it so I’m familiar with source code, or because then I can make it dependency-free (god knows how many times I tried to install Haskell packages on Windows that required Unix-only stuff).

      Also, check out good are the existing solutions, I was making an IRC client and the biggest problem it had was the fact that it used an existing node IRC library that was already out of support, full of bugs and untaken pull requests (I withdrew mine after like 8 months).

      1. 1

        I think it depends on what you are doing it for: As a learning project, or something you want to charge money for (ie, something like a MVP)?

        For a learning project, you do as much as you can. Because all abstractions leak, you need to know exactly how the system is working across all layers.

        If you are building something you want to charge for, or something else you’d like to show to others, to boost your resume for example, then you always use the most stable existing solution.

        My preference is for the latter, even for hobby projects. The problem is, as I wrote in my blog recently (http://pyskool.com/one-day-programmers-day-will-never-come/) , people choose projects that will take 20 years to complete, and then get bored after 20 days. They then give up and go to the next cool thing, get bored with that, move on etc , never finishing anything.

        So my personal preference is to take the smallest thing, and actually finish it. Outsource everything not core to your product. Don’t spend 7 days getting an SSL cert and integrating Stripe, when you could just add a Payal or Gumroad button in 7 minutes.

        But this is me coming from a bootstrapped/MVP angle, and it will be different for you based on your goals. Which is the second thing: You need to know what your goals are. Choose based on that.