I was wondering, how do you guys ensure you can build a side project from the ground up the quickest?
Do you have a scaffolded version of a project which you use as a foundation, or do you copy/paste snippets from previous projects?
Interested to know multiple perspectives, I'm sure both have merits :)
I find the fastest approach is to actually launch a "Wizard of the Oz" version first.
That is, before coding the core functionality of your V1 product, try to see if there's a way you can manually do it. This will help you test and refine your concept and marketing first, before spending the time to build something that may not pan out.
Example: FanDuel (fantasy sports betting) started off with a Google Docs spreadsheet, recruited their first players on Craigslist and collected fees with PayPal:
https://www.fastcompany.com/3058506/twisted-and-mischaracterized-how-fanduels-ceo-is-fighting-back-against-detractors
Some time ago I built somewhat of a boilerplate for side projects since I found myself constantly copying and pasting from previous projects. Essentially the boilerplate has docker boilerplate for the services and some stuff like auth and basic user flow (including oauth login flow for social logins), plus some basic test suite setup. Overall I found it has saved me a lot of time spinning up new projects as I only need to fork that boilerplate and get going.
I'm doing almost the same set of boilerplate features, good to hear I'm on my wait to save some time :) I really dig Pivalink's landing page btw, is that custom or using a template/off-the-shelf solution?
It'll definitely be worth the effort once you're done! And thank you, although I can't take the credit haha, it's based on a cruip.com theme.
I have this for rails apps but for other languages / frameworks I haven't done enough yet to justify taking the time to create one.
Where something like this can also come in handy is for prototyping/testing a quick idea outside of your main app(s). You can spin up something quick to try an idea or figure out how some part of the underlying framework you're using works.
I am in the camp of copying and pasting from past projects. I have built up a pretty solid library of user login/auth code & screens, background email queueing & management, Stripe integration code etc. and I usually block copy chunks of code then modify to suit the new project.
Each time the code gets refined, more solid and reliable and becomes the source for the next project. I guess I could have started with some 'off the shelf' purchased boilerplate templates, but I like that in this case, I have a fairly deep understanding of the code anyway, seeing as I wrote the first versions of it, and that helps when trying to debug a problem or modify the code to suit a different use case.
Howdy @BetaPeak, I came up with this to use as a starting point for my side projects: https://github.com/rails-boilerplate-code/base-template/blob/master/README.md
Looks good mate, it's a shame I'm not a Rails dev, but it does seem like a good foundation indeed :) Good luck with extending it further!
I used to just copy and paste the code that I needed from one app to another, but for my last project I've used: https://github.com/vchaptsev/cookiecutter-django-vue
This helped me get started with:
Sometimes I still copy snippets of code, but usually I don't have to.
I think the biggest thing I've found to give me high leverage is to boilerplate generic components (or other design components), as long as you don't go too overboard.
For example my 'paged_list' component has been a huge lever in my current Rails/Vue project. I have a component that handles the logic of pulling the next page of results from any endpoint on my API backend and spits back out that data into a Vue scope. When the user clicks the next page button, it loads the next page, etc.
I use this component in nearly every place in my codebase where I need to display a list of things (which I've leaned into since it's so easy for me to use this component generically).
I used to maintain a personal boilerplate repo that I would update in parallell to working on other projects. I don't do that anymore though. Partly because I've gradually concentrated focus on one project rather than many, but also because I'd never actually use it: Whenever I went to build something new I'd consider it a chance to do something different, based on what I had learned building the previous projects.
(For the parts that were similar to previous projects, I find that if you know the language/framework, coding what you need doesn't take longer than trying to dissect out the relevant part from a different project anyway.)
@jensmtg that's an interesting point.
I find I tend to lean back on well abstracted out stuff mainly around account management (editing common fields, first name, last name, addresses) and billing (I've abstracted out BrainTree's SDK), all that based on Laravel, and it seems to save me quite a lot of time, personally for me. I see the benefit in boilerplate for those things specifically, as they are quite critical foundational components and having them backed up by a solid test suite is very good to have.
On a different note, do you mind sharing which is that project you've decided to concentrate on?
I can absolutely see the value of abstracting out the parts that you describe, and I think it's sensible to draw a line towards the administrative capabilities like authentication, authorization, user management, payments, etc. Even though I have no plan currently to use it in any other projects, for the thing I'm working on now I implement all those things as a separate module from the core app dynamic myself. (I use django as backend, so in practice it's an independent app.)
Sure; currently I'm working on an app for notes, where I try to make it intuitive to work with complex information. Not the most original thing perhaps, but I'm mainly scratching my own itch with this project. A bit low-key building-mode for now, with few testers, but I will hopefully be able to share more come january. :)