The technology aspect is really only 10% of it. Sure, it's the essential 0-to-1 kicker that gets you going, but once that's done you still have to find product-market fit. That quickly assumes second-job status and can wreck your personal life. I've seen it happen.
A side project means you're taking all that on yourself without any help or real guidance. Not having that help means that when you finally do ship your side project, it's probably not going to achieve the kind of rapid growth you need to make scaling up possible.
And you really need rapid growth in order for working on a startup of your own creation to beat out having a reasonably-decent job. And if you don't have a reasonably-decent job, it's way easier to switch jobs / industries than it is to build out your own company.
What I want out of a side project is the kind of deliberate practice that is often lacking in my real job. Also to chase down random mind hares that seize my interest.
There are tons of other people who also think side project is a way to learn something new, yet they ship.
Also there are tons of startups that started out as side projects. Facebook did.
You have no excuse. Stop lying to yourself because it's not doing yourself any good. The only reason you're not releasing your side projects to the world is because you are afraid of criticism.
I still talk with the guy and fill out estimates for his potential clients whenever he wants. We'll eventually hack out a working professional relationship and start a company together.
The fact of the matter is that personal life matters more to me than professional life. I think a lot of people wind up using professional accolades to make up for things they can't get in their personal life. Maybe that's not you, but for me, working on my relationships and my emotional health is 100x more important than a big pile of money and influence ever will.
Maybe your answer to this is to "just work harder." To that I just have to say, 'absolutely not'.
I said "ship" it. not work harder. You can even ship something you built in a couple of hours.
It IS ok to not ship every single project you work on, but it is not ok to be proud of how you never ship.
Personally in terms of "learning" I learned 90% of what I have learned AFTER shipping. You think you are learning but you are only scratching the surface.
I found out that after landing six clients and taking on a ton of business, myself and my partner (who was also working a full-time job too) got in and suddenly my personal life vanished. Sure, the money was rolling in, but all of my relationships suffered, I didn't have time to do the things I really wanted to do.
Worse yet? I felt like all my clients would want the latest and greatest web technologies and applications to make their businesses run smoother and easier to manage. Nope. They just bickered with me and it was a series of struggles to get anything done. Twelve iterations of design and several "come to Jesus" meetings couldn't stop the non-stop changes for one client. Another client was stuck in a paper and pen world and didn't want to automate or change anything about the one process that hindered their business. Another wanted web design from 1995. It was maddening.
After a year, I fired three of my clients, finished two of the sites and cut those clients loose and then kept the only one that was a joy to work with.
My life returned to normal, but it made me realize exactly what you said. My LIFE is more important than a pile of money. Maintaining my relationships with my family and friends should be more important.
I did that and gained nothing from it. I don't mean it as a complain, more like reality check - most of the time you don't magically learn by shipping whatever you done in few hours.
It's like saying "I have a Twitter account and nobody cares what I say, I never get a single reply or a like. Btw I have 0 followers".
Shipping means getting it out there AND see what people think of it. If you at least tried to do that, you would have probably learned something. Even one person looking at your thing and giving you their thought is a learning experience.
Most people don't do that because they don't want their ego to be hurt. My point is don't worry about that and just talk about stuff you build with as many people as you can and hear what they say. It's ok even if they tell you it's shit, because you have now learned that you have built shit (You would not have known that if you never talked to anyone), and if you did built shit, you can learn what makes it such a shit, so next time you can do better. Otherwise you can just keep making shit.
Lastly, random strangers on the internet telling you that you did build shit does not mean you did built shit. Nor them telling you that you did something awesome means you did something awesome. They may be right or wrong, they may be trolls, they may want to feel you good, they may have had bad day.
The feedback may be useless simply because they have different goals that you had. Especially in situation where your goal was to ship whatever is possible withing x hours (topic of this thread) and the public it is a shit cause they would accept something equivalent to days of work. Which is alright as far as I am concerned, but hardly a learning experience.
And they both managed to keep it civil several responses in. (Although one of the people is definitely nicer than the other -- I won't say which).
I'll leave you with the now famouse Glengarry Glen Ross Scene: https://www.youtube.com/watch?v=v9XW6P0tiVc
Always be shipping! You don't ship, you don't exist. When I hire I always ask about shipped products specifically. The things that didn't ship don't exist. I consider that wasted time. One shipped product means more than 1000 personal projects that didn't ship, no matter how much you think you learnt.
You can have a rewarding personal life and still learn while building something on the side, and show it to the world. But, I think you have to be prepared to appreciate the process without expectation of payoff. Just my observation, your comments read like there is a preoccupation with the latter.
There is a lot of point in shipping, and as somebody else pointed out that something made in 2 hours can also be shipped.
What shipping has taught me is to really really restrict the scope, the un-essentials. That in turn has helped in my day job as well, to negotiate correctly on milestones, feature scope etc helping me in staying sane and productive!
>> strangers things that they want you to give them
I don't know if you mean OSS users by this but if yes, then where are these users pestering the authors to give them something, they just lap it up if it is useful when the author gives it to them.
I often set the bar so high there is no chance I could ever finish. The only projects that are attractive and shiny enough are those that are too big to finish.
E.g. I could choose between writing, completing and shipping a small indie game. Or I could write an OS from scratch, or the next Unreal Engine because I think it looks shiny.
Obviously I have no chance in hell of compleing a AAA game engine. Or an OS that does any more than say "Hello world" on boot. But I can pretend to be writing a AAA game engine - and I can keep pretending for many nights, until I have 1% of a game engine. At that point, there is probably something shinier that gets my attention.
So releasing it to the world: Obviously: I could put my 1% of a game engine on github for everyone to see, and that would be "releasing it to the world". But most likely no one would see it! I have hundreds of projects sitting around in various stages of completeness. Perhaps 2 or 3 were ever in some kind of usable state - and what they do have in common is that it was horrible to "finish" them in terms of making a proper repo, readmes, deployments, setups etc...
The reason finishing stuff and shipping them is so boring is because even a trivially small project that people actually want to use will have a ton of work required that aren't coding. I have no interest deploying a web app, no interest in drawing (or searching for) graphics for the little indie game etc. I'd rather make a new placeholder game than finishing the first one! I just want to code. I don't mind showing my code. I just normally don't want make a finished product of it. I get enough of that at work.
Edit: noticed someone said pretty much exactly this already and you responded. Oh well.
So yeah you sure could complete and release shit, you just don't want to for some reason or other.
Terry is a force of nature.
This reminds of a chapter in "Computer Power and Human Reason" where Joseph Weizenbaum describes the differences between compulsive programmers and professionals.
> His main interest is, in any case, not in small programs, but in very large, very ambitious systems of programs. Usually the systems he undertakes to build, and on which he works feverishly for perhaps a month or two or three, have very grandiose but extremely imprecisely stated goals. [...] It is characteristic of many such projects that the programmer can long continue in the conviction that they demand knowledge about nothing but computers, programming, etc. And that knowledge he, of course, commands in abundance. Indeed, the point at which such work is often abandoned is precisely when it ceases to be purely incestuous, i.e., when programming would have to be interrupted in order that knowledge from outside the computer world may be acquired.
I'm not really in it to create, and that's perhaps the key. I write programs because that's how I understand problems. If I could understand something by reading a book or Wikipedia page then I'd often just do that and not have to do the coding at all!
Doing this kind of superficial learning-through-coding is fantastically effective I must say.
And why should I? I'm doing it mostly for the fun of coding, and striving to "ship" things takes some of the fun away. I most certainly do not want to start a start up from any of my side projects. Perhaps an established open source project at most.
I do "release" my project, ie. push them to GitHub, but they don't really gather any attention or contributions from others. Sometimes I share some snippets in relevant discussions and receive positive feedback but I have no idea what it would take to actually gain any traction.
So I've basically given up on the idea of "finishing" or "shipping" or whatever. I have 3 hours of free time on Saturdays and I get to choose how to use it. I can either do fun stuff (coding, art, etc) or desperately try to "ship" and gain traction but that just isn't fun.
That said, if anyone is interested in open source space simulation (my current "main" side project, 5+ years in), get in touch on HN. There's no way I'll ever ship it alone, but it's nearly impossible to get anyone else to help me with it because I don't have anything cool and shiny to show.
I have many friends who release things like you. I'm not saying you are doing this but these guys just release and make no effort to promote them. They are afraid that they will get hurt if they try hard and no one still wants their thing.
I understand this is totally valid fear and I have it too, but I also know that getting the word out vs not doing it makes a huge difference.
Next time you build a product try to post it online everywhere like Reddit and Show HN. I'm sure you'll gain more confidence and experience from it.
> Next time you build a product try to post it online everywhere like Reddit and Show HN. I'm sure you'll gain more confidence and experience from it.
Here's the problem, I never "build a product". My free time is not nearly enough to build a proper product that would a) be fun for me to write b) interesting enough for the general public.
Basically the best I can do is show a few screenshots or a few hundred lines of interesting code. In my experience, that's not enough to gain traction on Show HN or Reddit. Sometimes I share screenshots on IRC and do get some interesting follow-up discussions but that doesn't really help me to get these projects any further.
Maybe I should gather up the courage and start posting to reddit /r/gamedev "screenshot saturdays" threads for getting feedback and encouragement. Although I'm not really doing a game here.
But yeah, I mostly try to not think about the idea that I'll never finish these projects and have fun while hacking on them. I've been doing this for 20 years now and never really "shipped" anything, so I might as well stop worrying about finishing and just have fun.
I currently work full time for a company whose policy forbids releasing anything I work on in my free time, so it's kind of nice--the decision is pretty much made for me.
I guess the advice is learn to _finish_ things but don't get too hung up on releasing them. Unless you're trying to build a business in which case you need to follow a totally different path (release MVP early, get feedback, iterate, market fit, etc.).
Luckily I live in a country where the law doesn't allow an employer to forbid releasing projects done on free time, so I don't have your issue. I would seriously reconsider my employment if I were given such restrictions. As little as I finish stuff, the ability to share and receive feedback from strangers in the internet is still positive to me.
I've got some similar projects: An NES emulator that I play with optimizations in, and a bunch of utilities related to the game Ultima Underworld, which are basically waiting to be plugged into an as-yet-unwritten game engine. There's some interesting code (both mine, and disassembled code from the original game binaries), but the shiny, attractive parts are spread thin.
Plus, if I had external pressure to work on these things, I feel like they'd lose some of their interest. Part of why I like them is that they're impractical projects that I can putter around in occasionally, when the muse strikes.
They are afraid that they will get hurt if they try hard and no one still wants their thing.
I have a feeling that naturally extroverted people do not understand that it takes a real push from other to show your work to strangers.
Same thing as the discussion about "demo days" earlier today. Those who are good in promoting are not necessarily those who are good in building projects. This applies to other aspects of life as well as it does to pitching startups.
I have a feeling that naturally extroverted people do not understand that it takes a real push from other to show your work to strangers.
http://jpad.io/ - Java snippet runner that means less boilerplate and automatic display as html tables / charts.
http://www.sqldashboards.com/ - Real time chart your database queries
http://www.timestored.com/ - Niche database training and tools
cough always be pushing :)
It's much, much harder to get a project to a state where someone can git clone, build and run it. Depends a lot on the target platform and the nature of the project, some languages and platforms are easier than others.
No need to be arrogant, though. Nice that you have the time and the ability to finish but don't expect everyone else to have the time and the capabilities to do so.
The thing is, not everyone builds things to have something at the end. A lot of my side projects exist because I enjoy hacking on them, not because I have some particular end result I'm looking for.
Of course, I have other side projects where I want both, and for those, shipping probably has value.
The amount of users that (a) browse the same websites I do and (b) take issue with the same things I take issue with are next-to-zero.
I also don't care to hear how I could refactor huge parts of my code to be more extendable in the future - because I have no plans to extend it to begin with. I know the code is absolute garbage and I can easily improve it if I took 10 minutes to refactor it. But it works and that's all I needed, so that's all that gets done.
People have different motivations for releasing publicly. I know you were probably speaking more to side projects, especially potentially profitable ones, but I felt I'd throw in my $0.02 to accompany all the others.
In the case of Facebook, I think it must have felt important, because it saw instant success around campus. Once you see that something is generating success, even on a relatively small scale, that starts to validate its importance and you can rationally consider increasing your commitment.
As a specific example, I wrote a personal set of Minecraft tools.
I read a lot of file format information off the wiki to get compatibility with their map (and other) files. Did I accidentally use protected IP because the wiki wasnt clean information? Maybe. Did I stray in to copyright violation by using their names for blocks, rather than renaming the numeric codes? Possibly.
Then there's the fact version 1 was a hacked together spaghetti ball with magic values all over the place I wrote in an evening. Would I have benefited from having that feedback told to me? Not at all -- that was actually solid engineering to get 'er done as a prototype.
A week later version 2 was out, but it was a complete rewrite that didn't have any compatibility. Maybe feedback would've been helpful here, but even I thought there were still some obvious flaws because I was trying a new style of programming in Python, and it hadn't gelled yet.
Version 3 was a week or two after that, with another breaking rewrite. This time it used a model of automata from a completely different source, changing the storage format, adding a scripting interface, etc. with only a thin definition file for and import/export layer to Minecraft.
And that's where it sits on a drive, 90% finished automata development tools with MC compatibility because I learned what I wanted to from the project and moved on to other things. (I say 90% finished because while it works fine, there are features I thought of but didn't add.)
I don't want to keep working on it, I don't want to share the implementation of the automata engine because it's slightly buggy, and I don't want to support the project if others choose to use it. (And they very well might -- MC development tools suck.)
What would've been gained, at any point, in "shipping" it (beyond using it myself to make a few maps, which I did)?
I've got a side project with minus $30/month in revenue, with no plans to do much better. I have 3-5 users who complain when the site goes down and give me feedback on new features.
The motivation for the project is twofold. The simple joy of creating something -- no different than hanging a child's drawing on the fridge, and to keep my skills current and to play with technology I might otherwise not be using at work.
That being said -- I agree with you -- without shipping a working product, you've got nothing.
No, I have side projects to learn and play. Lots of things I try end up in production code at work because I learned how to do it. Of the projects that are in pretty good shape I don't want to ship it because then I'm committed to supporting it. Shipping turns a side project into a job and unless I have a killer app that will make me some serious money - I have a job and I don't need another.
Personally I'd hate to run my own business, since that means moving away from the code (even if you get another person to take care of the non-code stuff; you still have to go out and find the right person for that / get involved in things that you wouldn't otherwise choose to). That said I'd love to create something, put it out there, and have 5 people come back and say "thanks for this; you've fixed a problem that I was having"; to get 100 people say that would be even better; any more and I'd probably start to get upset as there would become expectations to start implementing things the user base was asking for, rather than just doing my own thing; which for a hobby project is all I'd want.
A lot of my side projects relate to my day job; I use my spare time to create tools which make my work life simpler. Sure the IPO belongs to my employer, but it means I remove frustrations from my working day without having to justify spending company time on the tools which allow that, and I can share these tools with colleagues so that my friends get the benefits too. That makes for a pleasant life.
I disagree. You only need to get the income you want with the work you are willing to invest. Depending on what you do and what you need, that can mean that scaling up is not required at all.
Bootstrapping a business out of a side project is a thing.
Sure, but it's not reliable. And that lack of reliability makes it inferior to a good job. If you're really a glutton for punishment and don't mind letting the market be your teacher, then you can make it work eventually.
If you're wired that way, for sure do what you need to do so you can stay sane. That's a big ole' pile of nope for me.
Good jobs are hard to come by and can be unreliable also.
I've never had a bad job. Every job I've ever had after high school, I was glad to have and reluctant to leave. Except the military. I was glad to leave that. But I was also glad to have it.
Jobs can be worked on, you don't have to accept bad situations. I've negotiated raises, perks, all kinds of quality-of-life improvements that were unheard of 5 years ago are on the table today. It's a great time to be alive.
There are plenty of dog jobs doing enterprise middleware API plumbing, and polishing a product for a zombie startup that doesn't know they're dead yet, and being 8th engineer from the left at BigBoringCorp. Maybe easy to get those jobs. The good ones, interesting problems, successful product/company, growth opportunities, steady pay/raises, outstanding benefits, etc. are not growing on trees.
The reason I can be comfortable in these jobs and many techies would feel So Unbelievably Professionally Stifled is because I have separated my personal life goals from my professional life goals and correctly (to me anyway) prioritized personal over professional.
If you're feeling professionally stifled, then you probably have personal issues to work through that would bear more fruit than moving the needle professionally. If you have a great job, but a shit marriage, you need to reprioritize. If you have a great personal life and you still feel professionally stifled, then by all means start moving that needle.
To me personal life is endlessly fulfilling, I can devote 24 hours a day to it if I was independently wealthy. Personal life is defined by achieving goals together with people you're very close to.
Just about any job in America that's not bleeding over into your personal life is a good job. That's my definition. I want to bleed my personal life into my professional life and not the other way around. This is where quality-of-life perks like work from home days, unlimited PTO, and such come in. Things like successful products, growth opportunities, meaningful raises, are nice-to-haves and not essentials.
The key difference is that my project was a video game (this one: https://www.youtube.com/watch?v=YwXl8lDrxn8) and that takes a lot of temptation to do what the OP is writing about, rewriting stuff in Haskell for example. The interesting bit when it comes to side projects (and now my full time projects) for me isn't actually the tools or the methodology or anything like that, but the end result. I spent my teenage years building games that I never finished, and it made me quite miserable, because I so just wanted to finish something. Anything.
I remember the first game I ever finished was a clone of Snake. There was nothing remotely interesting in the implementation or in the design, but I was so flipping pleased with myself, I had finished something! And that let me slowly build my projects up to more interesting endeavours, and eventually to one that could be sold. Starting small was the key for me, as I learned two things: 1 - what was 'too much' for me to try and tackle at the time and 2 - self-discipline, not chucking the project the moment I got bored, or had a 'better idea'.
I just recently released a tiny game as well (http://declanhopkins.com/asteroid-quest/), but it was only put on my website and I made it in a month. Regardless, it felt really good to get a game out after years of trying. I'm working on a new version of it now.
One question - how hard is it to actually deal with the administrative, non-code tasks of turning your side project into your main business? I'm talking about incorporation, supporting clients, basically all the stuff that goes on outside the source code repository.
Supporting my customers ought to be the biggest time sink, but actually, I never needed to patch the game.
Organising discounts and Steam sales and things like that takes thought, but I actually really love that side of my business.
For my current project, marketing is going to be a big deal for me, but I learned a lot doing that for The Cat Machine, and for me it's as important as anything that goes on inside my Git repository.
Using cats was a good idea, definitely.
The music is done by Peter Nickalls (http://peternickalls.com), a friend of mine that I've known for years and years. Too talented a composer to be working on my little projects, but I'm thankful for his work. The music he's worked on for my current, somewhat more ambitious project is absolutely incredible though.
This is the advice I can give to anyone who has a side project. Get to the point where you can show something to the users and just start adding stuff.
Even if it's just two lines of code or changing the favicon - still worth it. In practice, it's harder to do than it sounds, but I've been doing it for some time and it's been going great.
In reality, you won't have millions of users on day 1 no matter how great your product is. If you start small and keep adding stuff you will have more success.
In fact, the biggest challenge for side projects is marketing and not the tech or infrastructure.
However, it also depends on the goal - if you want to build the project that makes money it's completely different story to experimenting with tech. In the end, you get the experience.
For example, a few years ago I managed to build an overengineered CDN product that compressed images on the fly (almost on the fly). I shipped the project and it even worked great for testers, but I didn't get to the point where it makes money, so I shut it down as with half unfinished features as it was taking too much time.
While building it I managed to learn Go, improve my AWS skills, plus some other tricks. Now it sounds like a great investment even though I feel that I haven't completed the project.
Because yeah, by hand, even deploying my webapp would take a couple hours. it took me maybe 8hrs of labor to setup my deploy script but given as I've deployed maybe 50 times so far it's paid off.
For me, that would be:
1) provision VM
2) configure the new VM (security hardening, install utils)
3) download app from git and configure it
4) take image of vm
5) install new image into my autoscaler
6) hot-replace live instances of previous version with new version.
doing each of those commands by hand and waiting for each to complete could easily take 1.5 or 2 hours of work. I did it by hand the first couple times but once I figured out my workflow I automated it (bash script) as fast as possible.
I spent a couple days looking into ansible, but as I have a very specific need I didn't want to spend 2+ weeks adding another chunk of "technical debt" to my product.
You can automate all steps for building an application but the signing to make your life easier. You can also automate things locally if you're worried about what you're signing.
The bottom line is that this applies to all apps (though your users might be irritated if they need to keep downloading updates).
Receiving daily updates for desktop apps would suck because it typically requires the app to quit and start again. A good compromise would be updates every four weeks. At the same time you as a developer always leave your app in a state were you could push an update anytime. So you still work incrementally in daily units of work.
Daily updates for libraries … if it's only publicly available code, I don't see a reason not to push daily. Anyone interested can check the commit logs. For compiled binaries on the other hand I can see update fatigue for users (other developers). Once a month or longer seems fine.
In the end, push regularly (daily, weekly, monthly, whatever fits you) without annoying your users by spamming them with updates, while at the same time reduce work units to a size that does not feel overwhelming.
This is so true. I, as well as a few others I know, have built some pretty cool things that have never gotten the attention they deserve.
I've built a good base for mplyees in about 4 months. Marketing it and getting it out there will take a lot more time unless I get lucky.
Shipping can be the result of, or one way, to do the right things. But if you look at projects on Github it's usually not a lack of "shipping daily" so much as a lack of packaging it as something useful. Often you see daily commits until the motivation wears off and the project stops. But the software is still buggy, there's no screenshots, it's not straight forward how to build it, lacks documentation etc. They haven't made it into something that is easy for other people to appreciate, so they don't get much positive feedback.
This is great advice, but when it's not possible to ship daily, I find that even just committing once a day is a good micro-goal to keep projects moving. The GitHub streaks feature can help motivate you too.
I discovered this late, but am glad I did. Are you ready for it?
The secret is this:
don't start something till you finish the last thing, no matter how poorly.
This goes even at a "micro" level, so don't start distributing the load on servers till you finish the last thing (interface), no matter how poorly you finish the last thing.
Now you have the secret. Go forth and complete.
I first "discovered" this trick with writing myself.
If you don't have an external deadline, you can afford finishing things when you are actually ready for it.
I have two half-finished Rails projects, a half-finished Arduino robot, and a guitar that hasn't been played in a couple of weeks. And you know what? They've all given me some joy, and have been set aside temporarily when that joy started to feel like work. That's the reason I switched majors away from computer science. I like programming. I don't like being forced to program. I don't like making software for someone else. It's a hobby for me. Not a job.
So you might want to edit it, but finish the first draft. You might need to tweak it, but finish the first version that actually works.
Not EXACTLY the same problem as the author, because I am not building out scalable infrastructure. I just spent a ton of time learning the fundamentals of angular and node, then try to understand express, then grunt, and mocha and bower and... now I have weeks into this pile of stuff... nothing working and I am frustrated, disappointed, and oh look Overwatch patch notes.. time to try out the new hero.
I started programming by working with codeacademy.com and taking a MEAN stack bootcamp - which was a good experience but not a great way to learn to code. I took this specific class because it met my work schedule, was online, and not very expensive. Hell, it was better than nothing at least.
I appreciate your feedback. I am at a point where I can build simple websites with html, css, java. I use bootstrap because css makes me angry. I take your point though, work with the fundamentals and progress from there. Thank you for your reply.
I have some friends that have an idea and I'm going to help them build it. So what do I use? The fast, low memory footprint of Swift?
No. I use Rails. I use bootstrap. I don't make a JS only frontend with api backend (Turbolinks works fine). I use what makes me productive and what's gets the first rev out the quickest.
For hosting, I put it on my Mac Mini (in my living room) via VirtualBox, with the same Nginx proxy I use for all my projects. I have no problems with scaling because I don't need to. Cross that bridge IF I get there.
I went through a number of years trying the latest and greatest frameworks, aws configs, etc. None it mattered to my projects. It did help with day jobs, but that was it.
Some other poster here was right when he said tech is about 10% of your business. There is so much other stuff outside of building your app/site and having analysis paralysis is gonna stop you dead in your tracks.
My advice (as many on HN have said before): go with what you know, don't over engineer, ship early and often.
I recently enrolled in FreeCodeCamp (2 weeks ago) and have been working through from the beginning.
Thank you for you comment. Best of luck to you, fellow newbie. :D
If this question has haunted you for literally years, the right question is "how do I get through my analysis paralysis", not "what is the right stack/language/etc."
My advice: pick three "side projects": one that you can build in a day, one that you can build in a week, and one that you can build in a month.
Build the first one in a day and ship it. This will motivate you and build your confidence in your shipping abilities. Then build the second one in a week and ship it. Then build the third one in a month and ship it. You've now shipped three projects, good going!
That said, I want to echo what @vinceguidry said. Side project != business. If you want to build a business, the same logic applies... just get something out the door. But you need to be serious about ongoing support and maintenance. Whereas a side project could be anything, like a fun open source project, a personal website, experimenting with new frameworks, etc.
p.s. Don't be so hard on yourself. You just shipped a blog post to the top of HN. And you've got a long history of blog posts on there. Maybe you should ask yourself why you can ship blog posts but not side projects?
Side projects tend to be small , fast and enjoyable. This is the way the human brain works and is actually much more efficient than taking big steps.
Also make sure that your main goal is fun, if it is not, it will only get worse. Fun is the fuel of the brain. You cannot fight fun, because you cannot fight the brain. The brain always win.
Make your brain your ally and success will come. You are not your brain , your brain is a lot more than you.
Let me say once more , brain.
Oh and if you think your code will never sell , remember that fortunes have been built selling rubber bands for hair. There is always a way.
" use the brain Luke "
It's true that a lot of programmers do jump from shiny new tech to the next shiny new tech. If it's to start a business, it's probably best to stick with boring stacks.
I think the author's intent is a good one and it overcomes the "perfect is the enemy of the good" trap we can all fall into at times. As the technical lead on a multi-team project last year, I had to beg my developers to just check in anything at one meeting because they were terrified of having the other teams see their imperfect code. When I assured them their code couldn't be any worse than mine, which I had checked it several times and actually had rejected by the version manager, that they were able to laugh and agree to start committing their work to the repository.
Your code is going to get criticized no matter how much you polish and engineer it. If you can accept that, then I think you will find yourself free to be more productive.
Trying to build something in your free time forces you to think about dividing work up into very small pieces (what can I do with a free hour, etc). I've found this very beneficial in a work environment.
If you get to the point where you can show people, showing people changes how you think about the project - some invisible social pressure to do better, similar to code reviews.
You also have to think through the structure of the entire project on your own - often in a work environment, you're joining something in progress.
This is also a great way to research new tools. Instead of thinking how cool they are, you evaluate how they fit into a "real" project, but without the pressure to actually make it work.
Do the Work - https://www.amazon.com/Do-Work-Overcome-Resistance-Your/dp/1...
The War of Art - https://www.amazon.com/War-Art-Through-Creative-Battles/dp/1...
You have to build a muscle for this stuff. It's hard.
I do get occasional this feature not working mails but at least I'm creating new sites again and making more money. If there is anything you want to take from this rant is don't waste your time doing things that other people are telling you to (how ironic). Do what you love and you will get shit done.
For solopreneurs the time is much better spent on marketing especially generating leads because it gives 1,000 times more return than time spent on writing tests and probably saving a few bugs later.
Also the rewards haven't been that significant as people claim, at least for me. My focus right now is to spend most of the time on SEO / marketing / generating leads.
The problem is when this behaviour crosses over into your professional life, because you're not delivering value to your customers quickly enough and as a result you'll either get sacked or the company can go bust. Having someone else to keep you in line works great, it doesn't even need to be a Product Manager or Product Owner. And if you don't have someone else to keep you disciplined, then you better work hard on improving this area where you're lacking. Write down ideas on paper for example and ruthlessly prioritise and prune them every morning. Sayings like "work on what's highest priority", "do the least amount of effort that results in the greatest value", "keep it simple", "reduce scope", "you aren't gonna need it", "defer nice to haves", and so on are things we hear so often because it really is good advice that you should follow.
I've realized that finishing a project is roughly 10% exploration another 20% getting to working and at least 70% polish. The exploration phase is very enjoyable and it's what keeps me hopping from project to project. Occasionally, the enjoyment will phase will encourage me to keep plugging away at it until I get to working. This is the minority of my projects, but it happens naturally to some extent. But I rarely put in the time and work to do that other, much larger bit to get to a done state. Because that part is actually work and it's not fun.
But what I've discovered in looking at my projects that actually got to done is that there's one thing that, for me, leads me to finish...having a social pressure. The projects that I've discussed with friends and gotten them excited about are the ones that I finish. My attention will wane and I'll drop it for a bit, but then I'll have a conversation where someone asks what what the status is and I'll pick it up and work more. And if that repeats enough, I finish. The best case scenario is getting someone excited enough to actually code with me on a project. In those cases, we usually get to done pretty quickly.
I think this is why being a solo founder is so difficult. You're going to run into difficult stretches and you'll want to focus on something else. It's a very rare person that can continually return their focus to a single problem, even in the face of adversity. But if you've got someone else to steer your focus back, you can keep working long enough to succeed.
So here's my advice to a coder who's never finished. For your next side project, when you get the inspiration, instead of immediately sitting down at a keyboard, contact a friend, go out for drinks and tell them about your project. Better yet, get a group of friends and discuss it. Get them excited about it and let them know that you're excited about it. Only after that step should you start coding.
1. External Deadlines. I'm a career teacher, mostly self-taught Python/Django developer, and am applying for dev jobs. The school year's over in June, and I want to be able to step into a new jr position in July/August. I'm planning to resign my position this spring, and cannot be out of work. My benefits and salary will stop in September. I'm f'ed if I'm not working by then. The need to ship projects (if only into my portfolio) is high.
2. "Deep Work" for time management. Ideas from Cal Newport's book "Deep Work" have been foundational in my getting more done. It's hard to find the energy to build my side projects/portfolio after wrangling eight year olds all day, so I started getting up at 5 am solely to work on my projects. I make coffee and toast then get to my desk. I close all applications except Atom, Dash, and Firefox; turn on Do Not Disturb; look at my to-do list in my notebook; then get to work. Having 75 un-interrupted minutes before my wife gets up allows me to get a huge amount done, and it's become gratifying to watch the 6 am commits pile up on my github punch card. I've also found that exerting discipline in this facet of my life has had a positive knock-on effect in other areas.
The trick I found to complete things is:
Do not switch ladders of abstractions. When working on a modern web application (with backend, frontend, css, testing etc) if you start with writing backend API calls, then just write all of them first. Starting with the API call for /user', /signup, /login, /compose, /rate, /play. Don't worry about it working. If you do TDD then fine, but if you don't tests before you write the code, then avoid writing tests until you're done writing the basic code for your API. Then you write tests for it and make sure that each endpoint at least works.
Then write E2E testing for it(for the backend). E2E tests are a great way to build your app with it's core functionality full working and validated. In other words, write unit tests which first call /signup, then /login, then /compose then /play (which is I presume one full flow of a user). This will help you figure out issues with your API and it kinda feels like writing a full app.
Once you're done with testing, then write the frontend, just simple HTML, don't worry about CSS. Don't try to grab React + ES6 + Redux boilerplate or things like that. Just go with the simplest thing. Even if after every action user has to refresh to page, so be it. Oh you heard about CycleJS and think that you should be using that instead? Well guess what, you purposefully chose a really terrible technology to build this app, so once you're done making your app in that crappy tech, then you can rewrite it in CycleJs or anything else you want.
This way, even if you abandon your CycleJS rewrite effort halfway, you'd still have a completed project(and trust me, you will never let your app be stuck at static HTML with no CSS). Chances are that you'd abandon it, when you've already written your app in CycleJS but made a new rewrite effort to write it in Vue.JS.
Basically idea is, you think in terms of one layer at a time, and you defer all desires to refactor things until you are done finishing that layer.
I had to make tradeoffs to maintain the schedule and not be worn out at work. I decided to start going to bed a bit earlier so I could get up earlier. To facilitate this, I changed my workout schedule (I'm doing HIIT for cardio rather than time-based workouts) and cut some other activities that didn't seem as important as my other goals. Worth it.
Michael Abrash has some books on optimizing code in assembly language, and he takes special care to talk about why & when to optimize that would also apply here. The point he makes repeatedly is to optimize from the user's point of view - don't do something the user won't notice.
We all do it though, this is a human trait, but we programmers and computer scientists often amplify the problem. We love obsessing over what's "best", without regard to whether we actually need the best. We are taught during our Computer Science degrees to generalize and abstract at every opportunity, to plan for future problems we might have, and for future problems others have had that we might never have. We discuss incessantly how important it is for software to be scalable, and how to use the "best" everything, best language, best database, best algorithm, etc.
Strive to solve only the problems you're already personally experiencing, wait to solve problems until you are already experiencing pain, and ignore the problems that only "might" happen, then it will be easier to finish things.
I've heard this described as "solving the problem you wish you had". A globally-distributed, scalable cloud infrastructure of microservices is good for the likes of Google, Facebook, Amazon, Baidu, etc. because it solves problems they face: handling millions of hits in a timely manner; avoiding downtime, every second of which is user-visible, loses them money and damages users' confidence in their service; etc.
It's very unlikely that a side-project will ever face these problems; an off-the-shelf Web server on an off-the-shelf host (say, Apache running on EC2) is probably fine.
A side-project which isn't shipped will never face these problems, because it doesn't have any users, any uptime, any revenue, etc.
I chuckled at that, because while it makes for a good joke, I've learned from experience that writing stuff in less mainstream languages like Haskell is probably the best way to avoid getting distracted by trendy new frameworks all the time, since they tend to have smaller, more niche focused communities that don't produce new frameworks every week that would even be relevant to you.
Acquiring all that knowledge leads to a feeling that you _potentially_ can do more. You are _potentially_ more powerful. It is a good feeling. You can never be disappointed in yourself if you don't finish anything.
Am I missing something? It's a nice set of thoughts, but I can't imagine paying to have read somebody's personal blog, and would have been vaguely weirded-out at him having ads on it.
People have built million dollar business that had it's first iteration in MS Excel, if it is useful to someone and kind of serves the purpose then that is enough for a start.
I've wanted to write for years but thought I had to pen esoteric essays composed of thousands of words. Recently I just started writing short, simple posts that are helping me establish a habit, develop fluency and enjoy the process of writing.
My first post was on this idea of atomic actions: https://alexsingh.svbtle.com/atomic-actions
Maybe it'll be of help to someone else :)
Or teach people how to use the new shiny thing.
Or help them decide the pros and cons of new technologies by talking about the subtle distinctions you have noticed between them through your experimentation.
While working to build out the "auto-scaling, multi-zone, cloud infrastructure" product, OP (or anyone for that matter) will get caught up building his own front end JS framework that will address some shortcomings of AngularJS or reactjs.
If I understand correctly, the point of the article is that it's incredibly easy to lose focus of what you set out to do and get distracted by something that is not very important to your project/startup.
You (probably) don't need the microservices and the complexity that comes with it, upfront. A monolith (and the simplicity in terms of deployment, logging, monitoring, etc. etc.) will probably do early on.
However, you don't want to shoot yourself in the foot for when it turns out you do need those things.
I try to write code in self-contained modules, with well defined boundaries, and glue it together in a monolith. If/when it needs to be split out into separate services, it becomes much easier.
So, application/business logic code: keep the standards high, do shit properly. Glue code to keep it all together? Less important. You can rip that out later and move to different infrastructure with the same code.
That's very generic advice, and I seem to always break my own rule on this at some point... but I find it's a better mentality for when shit just needs to get done.
Doesn't help with tech choice in general though (and I'm often guilty of this as well...).
It does make me feel a little better knowing I'm not alone in my shame though. And hearing about other's solutions is really helpful too.
Well, you probably know that. But for me that was important, so I'll mention it anyway.
Some of my stuff is good enough to use (as in early alpha), but doing the final 20% won't pay off anyway.
Also did I mention that you are an introvert by nature (read susain cain). You are easily distracted by shiny things.
P.S. I am no expert, those are just the things that I realized about myself....
P.P.S Shit. I think I am still like you, because otherwise I would have worked on the code review that I was supposed to do....
I wonder if OP has ever question why he wants to create these startups.
I found a while ago, that I like kids, I like playing with them, I would never have one though, I see Startups as the same way, it's something you'd be stuck forever, like my JQuery Mobile based product of my own startup, I can tell you now that I get to fuck around in my free time, now I'm happier.
You need to question yourself more, are you a programmer or an entrepreneur?
It's crazy how the little things add up, like sounds, icons, animations, hosting, advertising, analytics, websites, landing pages, facebook pages, codepush, in-app purchases, etc. etc.
Hopefully I'll launch soon though, and be able to share it on HN.
I have been developing professionally for 7 years now and had similar experiences. It's important to allow yourself to stand still, if vacations aren't possible, exercise and meditation might help you a lot too.
Usually some well-funded competitor comes up later with the same idea and takes all the market.
My advice: Don't bother starting a side project unless it's really niche, easy to implement and you just want to make enough money to replace your own income (the market has to be small).
Unless you personally know people who have tons of money to invest in your side project, then it's a complete waste of time. It has to be people first.
9 out of 10 businesses fail and it has nothing to do with abilities, drive or persistence; it's only about luck.
I've met a 17 year old who built a wordpress website that generated $10K per month after just 6 months (though it already had tons of traffic in the first month) and couldn't write a single line of code. I've heard of hundreds of similar stories.
Some random person somewhere on planet earth randomly puts together an app because they think it's cool without any thought whatsoever; it blows up in popularity out of nowhere; then some smart engineers/people who actually understand the potential find out about it early enough and join up in exchange for a stake in the project; that's how actual smart people do business.
As developers, we tend to think the technical stuff matters way more than it really does. I think non-technical people almost have an advantage here - they'll choose the minimum technology to get the job done.
I've seen some really nice websites created by friends using nothing more than Squarespace or similar. I fear that if I'd been given the job I'd have procrastinated for ages over all the different options and ended up wasting a lot of time and ultimately creating something less impressive.
You can put that off until you have a successful startup and I bet by then you'll realize you don't need it anyways.
Personally, my problem is that I just have too many side-projects. I have one startup side project, but I probably have a half dozen of other OS side projects that I'm either working on here-and-there or I'm at least thinking about when I should be thinking about my startup.
I think this is one of the disadvantages of doing a startup as a side project while still working full time. Even though I allocate 1 hour and a 1/2 to 2 hours a day to work on my startup I still find myself working on other hobby stuff nearly half the time :( A lot of those hobby OS projects come out of some problem I'm experiencing at my day job but don't have the time to solve in the elegant OS way I would prefer to.
I'm super happy to have read this article and plan to take the advise. No more side-projects, just get my startup shipped. ️
I guess all of us learn something similar to this at some point in our lives.
Most of the projects I work on in my free time I start because I want to learn about something (new language, new UI framework, whatever), and once I feel I have achieved that, my motivation drops dramatically.
Also, not having to deal with deadlines, strange and ever-shifting requirements, or angry users is part of the fun. Walking away from a half-finished program is not something I could get away with at work, so it is kind of a relief to be able to do that sometimes.
In the quiet times, I ask myself these questions and get sheepish, embarrassed answers. When you can give reasoned, confident answers on hard, painful questions about your future business rather than current tech demo, then your project has a shot at life.
I have an amazeballs tech demo for my side project. It is scoped way too huge. Heroics and not knowing what I was signing up for got it to where it is today.
Honestly, if I were to do it again, my first features would have been user management and payment processing. I wish I could take users and have them pay me as soon as they saw value in my growing hobby project. But I can't because I didn't prioritize getting users and using their subscriptions to fund my work. I have a ton of neat features and no users, argh!!
Perhaps you simply "haven't learned to finish what [you've] started", but sometimes there are deeper issues at play.
Tinkering with stuff to figure out how it fits together is good. When the right project presents itself, the persistent tinkerer will be ready. She or he will have the advantage of knowing how to do the project.
I used to dream up grand plans, start building, and before I got to the end I'd have thought up three more things I wanted to build. That isn't any way to finish anything, it's a good way to learn about limitations and develop new skills.
By scope way down, have a few ideas and consider what they share between them. What single feature will I need. I build that. But, that feature in and of itself has a lot of parts so I pick one and I build that. If it has smaller parts, I build one of those.
Instead of building some grand machine, I build gears. It's far more satisfying.
It also helps to remember that software projects are never finished - only abandoned.
I finally bit the bullet and launched http://www.survivalscout.com in January. It's a definitely whole new set of challenges going from coding to trying to market and sell your project.
I wrote a post titled Side Projects: Avoiding Failures to Launch a few months ago that touches on these same ideas in more detail.
Also, using Pivotal Tracker or some agile tool to track stories gives me a kick to doing things. Commit to a small number stories per defined sprint period and get it done.
So I've became more picky about the side projects and if I'm unwilling to commit to finishing it in the wee hours of the morning then it probably isn't worth doing at all.
Also one piece of advice: Do Shown HNs more often. For me, they are regularly an great source for feedback.
I don't really want to spam HN but I might give it another try and see if I can get some feedback :p
(if its a bad joke, dont vote me down :) )
I'm highly motivated to find something that people want and the only way to do that is complete things.
This can be a good thing, if it helps you move forward, as long as you pay it off + don't let too much build up.
Here here my friend.
I first started creating a project or two that were completely free. These projects helped me learn what people like and if people were even interested in using anything I created. Turns out.. I've got good ideas that people actually find useful. I'm not after creating the next Facebook, Twitter, or LinkedIn. Rather, I'm after creating things on a much smaller scale that help with everyday life. Once I got that concept down and accepted that I would not be creating something huge like a social media network, but other useful things on a much smaller scale, more specialized and to the point -- many programs start off great -- then the developers add too many things to it and it becomes bloated and no longer focused on what it was originally meant to do.
So whenever I start a project: I write out all the things it should do; its function and purpose. I do my best never to deter from what I had intended it to do. This keeps me focused and helps me complete projects much faster. I did more research in how to charge for the things I made. I would love to give away everything for free, but I need to eat and pay my mortgage too. I'm certainly not looking to charge anyone an arm and a leg, but if I charge a fair price for the products I create, taking the time and consideration, and how some of it does actually make life easier, than why not ask my users to pay a small fee to use the product that helps them in their everyday life?
If everyone pays a small fee to me, than I can continue supporting my products and creating more. I've certainly lost motivation and interest too many times to count, but money is certainly a motivating factor. To help stay motivated, I originally calculated how much potential income I could make from X amount of people signing up and paying the monthly or yearly recurring fee from any project I start. Anytime I lose motivation, I look at those numbers as the potential revenue that I could be making and it instantly puts me back in the mood to continue my side projects.
I was so serious about my side projects that I registered an LLC in my state, opened a business bank account in order to collect money via Stripe, and I talk about and act like I am already a business owner creating products for my business. I have a few "solid products" out there, but the ones I'm charging for are still in beta and testing phases. My journey into understanding how to design products for people began at the end of 2015 and it is now the beginning of 2017. So I'm about a year in so far. I will eventually get to where I want to be.
The other thing that keeps me motivated: I'm tired of working for someone. I've done it for almost 20 years... I have dealt with my fair share of arrogant asshole bosses, backstabbing co-workers, or just being under-appreciated or under-paid. It is exhausting to have to show up to a place for 8 to 9 hours a day, only to be treated like you are just a means to an end for a company. I get it: they need to make their money too, but to treat you as a human being and show respect and help you to keep your dignity and sanity goes a long way.
I get to watch other departments who are all eligible for things like "CEO's Club" or "Honored Vacations" or "Gold Member Status" while my department is "not eligible" and completely ignored and treated as if we don't matter, despite the fact that we bring in millions of dollars every year for our company. We design the products for the entire business and control how things are distributed and what they look like. We literally influence how web design looks on the Internet. I'm tired of watching my co-workers make mistakes and not get in trouble for it, while I make a single mistake, far less worse than theirs, and I am singled out, and a whole meeting is called to address the issue. Sure, I'm probably held to a higher stand because I have been there much longer than my co-workers, but everyone should be held to that high standard. I've worked on projects that have brought the company in tens of thousands of dollars in a single shift. I'm also tired of being the developer who can complete 4 or 5 projects in a single shift, while my co-workers can hardly complete one or two projects, yet there is no bonus to me for doing that, yet it is expected that I am the one to be the sort of "sweeper" who ensures that all projects meet their deadlines, no matter what, while it is okay for my co-workers to leave me those projects to do because they know I will do them -- and I have no choice.
I'm certainly not complaining about my job or the money. I love both! I love web developing. I love web designing. My paycheck isn't the greatest (because most of us.. could always stand to make a little bit more -- and more never seems to be enough), but it allows me to pay my mortgage and other bills and feed myself and my family and enjoy life a bit. I also live about 10 minutes from my job which is awesome. Imagine all that money saved in gas and car repairs. On the warmer days, I ride my bike to work. It is such a relief to be so close to work! But giving 8 or 9 hours of your life every single day, 5 days a week, 52 weeks out of the year... it is very draining. It is like I am paying for my house to sit there all day and be empty.
So this is why when I go home.. and I am working on my side projects, I feel I am working for a better life: Designing products for others to use, hopefully products that don't have too many bugs in them, and my hope is to create that recurring income, so that I can work 20 hours a week and not 40 or 50 hours a week.
Sure, this is totally "first world problems" -- I'm happy that I'm not working in fast food. I'm happy I'm not in construction or that my job is not backbreaking work or intensive labor. I'm happy I'm not working for minimum wage. I probably have a better life than most people do. Again: I am not complaining about my job or the money. I'm not even really complaining about my company. The issue lies in not being treated with more dignity and respect and appreciation, which I think is completely lost in much larger corporations, where you are just one among thousands of employees.
So to never complete a side project means you are content with your life as it is. The only way to get ahead in life is to create things that other people like, want to use, enjoy using, and would actually pay you for it (or win the lottery or manage to successfully sue some corporation or whatever).
You could try to create something like Facebook, though Google Plus showed us it is not possible to even contend with that type of influence and stronghold. To not charge any money at all, you have to basically get to the point where you are receiving so many visitors that advertisers love you. Therefore, your only option is to charge a small fee for the usage of your product. You may not become the next Mark Zuckerberg, and that is okay. But if you can generate enough income to actually quit your day job, than I'd say that is success right there.. at least, it is success for me and certainly keeps me motivated to complete those side projects!
Unfortunately, they chose a guy who was there for 15 years with no experience over anyone else. I had to train him. I had no say in that matter. He has been buddy-buddy with the Vice President of the company for that long as well. Again: There was nothing I could do about it. Other than his attention to detail, he has no coding skills. He doesn't have any management or leadership skills, either.
I have another boss who is above him who has me work on some side projects too, steals those ideas, presents them to the company as if they came up with it, and completely takes all the credit. What do I do about that? Say no and get fired? Suffer losing a job that I do actually enjoy doing that pays me enough to pay my bills? If you are a manager, you know that corporate world very well, don't you? Everyone is out for themselves. Everyone is just a number and is expendable. I know this -- my company has a high turnover rate.
I have bills to pay so I have to put up with this for now. The difference between me and other people (except for the ones on Hacker News :P): I'm doing something about it. I could go get hired by another company and make double what I am making now, but I run into the same situation over and over again: I am working for someone and putting up with the same exact bullshit. Every job. Every time.
I am comfortable with my current job so I see no reason to leave. I am working on improving my situation to get out of it. If I can do both: I would happily continue working for my company while running my side business and making a ton of money doing it.
So you are absolutely correct: I'm not trying to be a code monkey. I'm trying to run a business on my own that will help me escape the corporate slavery that I find myself stuck in at this time.
Zero or more feature nudity, ditto sports, one's a flowchart, but they have one thing in common: Nude or not, none of them have anything to do with your work. So what makes any of them NSFW? (The subject of this discussion is "getting things done".)