I can't imagine ever shipping a side project. That's not why I build them. If I ever got to the point in my life where I do want my own company, a side project is not the way I want to go about it. Companies take a lot of work, that work has to be understood, then delegated and shared.
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.
Oh believe me, I did try. Moved in with a business cofounder and started working on an idea. We squabbled over a lot of things before I realized that it was a marriage and not a transaction, and what I wanted was more transactional. So I bailed and got a job.
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'.
> 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.
It still takes time. Time spent away from your loved ones, away from your friends, away from doing the things you really want to do with your time. It's great that you find meaning in learning from the market. But the only love the market can really give you is colored green.
As someone who started a side business with the thought of doing both that and my normal 9-5 until my side business took off, everything you've said in all your responses is completely accurate.
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 said "ship" it. not work harder. You can even ship something you built in a couple of hours.
"
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.
That's because "shipping" doesn't mean just posting it online randomly where nobody finds out.
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.
People seen it, you assumed wrong. Some people give good quality feedback, some people give bad quality feedback and I really did not gained all that much. I was ok with not gaining much, I am not complaining. People do and don't do things for variety reasons, even one human has usually multiple contributing reasons for everything. If you assume single reason for most people, you are likely to be wrong.
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.
A B C - Always Be Closing! In this case, always be shipping. I see a lot of resentment around here against the fact that you developers are always seen as lowly peons by managers. And here we have the perfect example why: this guy doesn't care about shipping, he only care about going into his little world and doing what he wants. This type of mentality leads to what we managers call 'coder mentality'. Programmers that see themselves as programmers instead of problem solvers. You need to get out of your head and realize that coding is just a tool to solve a problem. It's not something that you do just because. It makes no sense. Coding in of itself is useless.
Problem solving though, is very useful. Some problems require only coding, some problems require some coding and other things, and other problems require no coding at all in order to be solved. You should always seek to solve problems that you and others have. Don't just go into your world and start coding. That will not make you a better programmer.
We managers hate the 'coder' because he just wants to code and not solve business problems. That is why you are treated the way you are treated and will always command less respect than others. By the way, when things are down and we have to let people go, who do you think we let go first: the guy who shows interest in the business and how to make work better and cut costs, or the guy who just puts headphones on and starts coding surrounded by red bulls?
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.
It doesn't sound like you were working on a side project there, and even then, you have one bad experience and throw your hands up?
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's no point in shipping unless you're gunning for a payoff. Sure, if you want to find meaning in giving total random strangers things that they want you to give them, knock yourself out.
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.
> 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 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.
I find your OS example a little bit misplaced considering a quite complex OS can be completed by one person (obviously more complete than "hello world") but regardless of that, the commercial value of a new OS is quite low but the usefullness of learned (I'd say) is quite high.
> 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.
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.
My interest is usually more in some specific problem or algorithm. I'm curious how subsurface scattering works so I write a sloppy pathtracer just to act as a shell for what I really wanted to do - the complex algorithm. Once I get it half working I'm done, because the goal was neither to make a product or to finish even the subsurface scattering part perfectly, the goal was to code and to understand the algorithm.
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.
I'm in a similar situation to GP. I've done tons and tons of side projects but I rarely have anything to show for it.
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 think you are doing great that you're releasing them into public, but your problem is you are not sharing it enough.
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.
Thanks for the feedback. Yes, I probably do share too little, and I get too discouraged when reddit downvotes my stuff to oblivion.
> 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.
Wow, I was going to write my own story of putzing around with side projects here, but yours matches it perfectly. I've got a local repo with probably dozens of 50-100% completed hobby projects, but I don't really release anything. I used to release stuff but then it becomes a maintenance pain. Users don't get that this is a hobby for you, and don't understand why you don't respond and fix right this minute. This is especially true for free projects.
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.).
Yeah, I stopped working on "infrastructure" utility libraries and similar projects because the maintenance burden is too high. Some people just don't get it - I'm not in it to provide a free service to anyone.
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.
Out of curiosity, how did they pressured on you and which community was it in (linux/frontend/java/python/etc)? Many project I seen (and used) seem to be abandoned after a while or are maintained slowly, so you not being able to maintain long term seems pretty much standard to me.
> Basically the best I can do is show a few screenshots or a few hundred lines of interesting code.
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'm in this kind of release, not because of fear, but because promoting project takes times (a full time job for some people) and I prefer to spend my time programming something else
Yeah, it takes a huge amount of time and effort to make your voice heard and your project promoted.
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.
These are all very neat and polished projects. And you have the advantage of doing web sites / apps which is a lot easier to release than a native app. The stuff I do simply isn't viable on the web (or even if it were, it wouldn't be fun) and I'm not particularly interested in working within a browser sandbox.
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.
> 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.
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.
I write a lot of personal userscripts that I upload publicly to Greasyfork just in case they benefit someone else or someone asks me to share with them. I rarely have plans to improve or maintain any of my work beyond my own benefit. I fix bugs only when they are an issue to my personal work flow. Most of them are quick hackjobs I write in 10 minutes to fix some personal pain point on websites I use.
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.
Side projects die because your initial enthusiasm wears off and you start to realize that you are midway through a project that you initiated for your own self amusement and it's no longer making you happy. Don't beat yourself up about walking away. It doesn't mean that you are a quitter and you'll never accomplish anything. It means that you need to find something more important to do. Important tasks are self-justifying; you don't have to talk yourself into working on them. When you find yourself on something important, your motivation will come. You will see it all the way through.
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.
I dont want everything I do criticized. I dont want every small doodad I make to have to worry about licenses and IP. I dont want to have people yelling at me for not supporting a weekend project.
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.
"The only reason you're not releasing your side projects to the world is because you are afraid of criticism."
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.
I agree with a lot of this. My one comment is that not all side projects are about a "full startup business". I shipped my 2 mo. side project this summer. Donors Choose Project Finder
https://appsto.re/us/JVmbab.i . It was 100% pro bono , and to keep my skills sharp. So far over $20,000 in supported donations. Keep an eye open for the next set of features :)
Agreed; many side projects are just for fun, to create a tool that you want & you don't care if others want it (though you may or may not choose to share it having created it), to ship just to show your friends, or see how it does in the wild without caring about whether it generates cash; just hoping that a few people find it & appreciate what you've made.
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.
> 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
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.
> 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.
If you can't find a good job in the tech industry, then you're either not really looking, aren't mobile enough, or have personal circumstances, like kids, preventing you from moving.
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.
I agree with everything you're saying except for this one. It's (currently) easy to get a tech job (in certain areas). It's NOT easy to get a good job. Unless you're well known, or have some popular programming blog with lots of readers, or really self promote well, you have to pound pavement with the rest of us to fight for a good company.
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.
A decent job is one that a) pays you reliably b) isn't a sweatshop, and c) doesn't have political problems that you can't handle. I've had these jobs throughout my career and I'd be very happy to continue having them up until the day I retire. Many of what you call "dog jobs" are jobs that I could be perfectly comfortable in.
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.
These are the kinds of comments that keep me coming back to HN. While I don't share your view, it's articulated so well and definitely gives me something to reflect on. Thanks.
I think I've released all my side projects to the world out of laziness: my Github account is not a carefully curated resume, it's just "things which were interesting enough to warrant source control".
I finished my side project a couple of years ago, released it, and then found I was able to quit my Python webdev job and go full time making video games.
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'.
Thanks for the inspiration. I just thought I'd say that your game is adorable.
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.
Honestly, not very much. I'm incorporated in the UK, which involves a 15 minute filling in of a web form to accomplish. I have an accountant who really helped me in the early days walk through some things I needed to know (normal stuff like save my receipts) and handles the VAT filings. The biggest time killer for me is the quarterly MOSS filings (registering European VAT) but that's a couple of hours of work four times a year.
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.
Audio is the only thing I don't do myself! I do the programming, art, writing and game design (and marketing/business stuff) but the audio side of things would be severely detrimental if I had to do that bit too.
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.
Hah, well, thank you. My academic training is all in Computer Science, but I've enjoyed drawing since I was a kid. Still feel like such a beginner in that whole realm, been teaching myself animation and design and 3D modelling in the last five years, I think it'll take another five years to really get anywhere!
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.
"Ship daily" only works with web applications. If I were to ship my applications daily (or rather: each day where there occur changes), I would just be compiling packages all the time. (Before you ask: This cannot be automated further. I will not give my GPG key to some automation to sign the packages with.)
I automate my deploy process by passing my password as an argument to my automation script. maybe you can try figuring something similar out.
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.
Hours? Could you elaborate a bit what exactly you mean with "by hand"? I'm probably not thinking manually enough, I can't come up with what could possibly that time intensive about any deployment.
"By Hand" I mean running each command required to deploy line-by-line, at the command line.
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.
I already have a Makefile to automate most of the steps, but you still need to write changelogs, push a signed tag to Github, update the package specs and create and push all the repos.
You can ship daily even if your process is not automated. I usually automate building and deployment later in an application's life -- not at the beginning.
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).
I think the basic idea is get it running and keep it running making incremental improvements. Whether your project is in an interpreted language or takes a day to build only changes the pace. I've worked on both time scales and focusing on getting something basic running then adding to it has worked for me.
When I was working on a game, we created a Patreon and promised new demo to backers every month. It's very motivating - you have clear deadline, money and feedback.
Web apps have the advantage that users don't have to actively update anything. One page load and they use the updated product.
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.
You could have a "nightly" release, which is updated as often as you like, alongside the "real" versions. Those who want the nightly can have it, those who want steady, stable releases can avoid it.
Push to your own local repo daily. Push to the actual users less frequently. Weekly, monthly, 3 months, just pick something reasonable and -stick to it-.
Don't agree. I think that is like saying you can become a professional athlete by just working out everyday. We mostly know what works. It's comradely, career and cash. Most things worth doing isn't going to result in much professional progress or money in the beginning, so working with and showing things for your community is generally the most important. That's what driving every sports team, music group, enthusiast etc. in the beginning. You still of course need the time, knowledge and motivation to do something.
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.
In terms of incomplete projects, "Ship daily" could apply to shipping something that sorta works to your non-tech business partners, pre-launch. If you don't have business partners then use your friends or, heck, even yer mom. Just show daily progress to someone (anyone) else. Doesn't have to be your users (which you may not even have yet).
100% agreed. I used to think that I "understood" this. But as you said it's much harder to do in practice. To anyone else who thinks "oh yeah I know all about that" without having actually done it, don't get so self-confident until you pull it off.
Okay, I am going to share my secret for finishing.
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.
Totally agree, my mantra is "The enemy of my main project is all the other projects." Starting is fun and seductive, finishing is a grind, but boy does it feel good when you do. It's how I finished a novel, a massive YouTube project, an iPhone game, etc.
My wife gets frustrated when I set aside a side project or a hobby for a while and pick up a new one or return to an old one. She says she finds it difficult to support my new hobby knowing that my old one is languishing. But the way I see it, the day I have to work on a hobby, the day I need to put hours into a side project, that's the day it stops being a hobby. That's the day it stops being a side project. On that day, it officially becomes a second job, one that likely isn't paying me anything.
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.
This is actually a good insight and I agree with it. However, I don't think it contradicts the essential statement. The wiggle room is in "however poorly."
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.
As someone who is trying to learn to code on their own, I feel like I understand this. The first question of "which language/stack/etc should I learn first?" has haunted me for the years I have been trying and getting nowhere.
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.
Unless you want to focus exclusively on Web development, I wouldn't recommend picking Javascript as your first programming language. The ecosystem is fragmented, and the language itself is probably not the best for teaching. Have you considered learning Python or Ruby first?
On the other hand, if you're committed to Javascript, I think you should start at the most basic level. Angular is good, but it's a complicated system that takes time for even experienced Javascript coders to get used to. Same with Express, Mocha, Grunt, etc. These tools incorporate complexity to hide it from the programmer. But as a novice programmer, you DO NOT want that complexity hidden right off the bat.
Assuming you've gotten past the very basics (syntax of programming language, executing Javascript in the browser, reasoning about simple scripts), I would recommend the following as an exercise for learning:
Pick a fairly simple website and try to re-implement it, without looking at the original code. Don't start with angular, bower, or anything else. Just Javascript, HTML, and CSS. This is the fundamental language all browsers speak, and you have to be able to understand it for everything else to make sense.
As you work on the project, you might start to find things annoying. Like, dynamically changing page content with Javascript requires a lot of code. How could you make it easier? Think about, and possibly even implement, a solution that makes sense to you. Then, once you don't need it, you can reach for a pre-baked solution (like Angular, Vue, or React in this case).
I have no intentions of dealing exclusively with web, but it seems to be the most accessible and it is easy to come up with projects to do. Where sitting down in front of visual studio trying to learn C# or similar is just way too big and harder to come up with things to do.
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've built (and continue to) a lot of companies using Rails. I also do Swift on iOS and have been playing around with Swift on the server since last year.
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.
Being in the same position (trying to teach myself some web development in my spare time) I recently decided to focus on the absolute basics and work my way up from there. This was after I quit a beginner's course which started with bootstrap, jquery, meteor.js and mongoDB. This may be fine for others, but to me it felt frustrating because all the interesting stuff beneath was kept hidden from me. I just used some tools in a predefined way without really understanding what was happening.
You are probably way past this level, but I really enjoyed the interneting is hard tutorial (https://internetingishard.com/html-and-css/) and playing around with flexbox and media queries. At the moment I am looking into Free Code Camps JavaScript chapters. Seems like a very long road, but understanding the basics concepts first, learning a little more every day and just playing around with what I already know is what keeps me motivated. But of course YMMV and this may not be the best way if you are aiming for a quick change in career etc.
This is my experience as well. Started with a boot camp that made me feel like I could actually get stuff done only to struggle with core concepts, debugging, and actually doing things on my own.
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."
Your problem is you have no momentum. You need to build momentum and get over your fear of shipping.
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?
Suffering with dysthymia taught me many things. One of the things is that I may be fine working under pressure but my brain is not.
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.
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.
It depends on your goal. Is your side project aiming to become a side business or an experimentation to learn new things? If it's a business, it's important to get things done. If it's for fun and to experiment, sometimes the end goal is not to actually complete it. The endeavour itself will be reward enough, perhaps.
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 share the pain. I'm incredibly productive at my day job architecting and tying together a plethora of microservices to deliver a platform of unified products. Outside of work i am absolutely freaking worthless. My problem is largely perfectionism. I've started working on seemingly great ideas and then took a turn to build a tool that would make task A less hack-ish. A few weeks later I'd open-source the tool/library and jump back on to the project only to find yet another thing to bothers me. My thinking here is that while I'm working on something in my spare time I should enjoy doing things the right way instead of cutting corners to meet deadlines. If i don't do this I cannot help but feel unbelievably dissatisfied and usually quit within a few days. Still don't know how to get over the hump. I'm almost thinking i have some kind of psychological disorder. On a side note, this same behavior helps me a lot in other areas, like working on a project car where attention to detail and just taking time makes the end result much better.
There's a Garrison Keillor quote I love that I think relates to programming as well, "A written work is never finished, it's simply taken away from you at some point."
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.
I built a search engine for lectures (https://www.findlectures.com), partly so I have something I can show people (e.g. my family otherwise has no idea what I do).
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.
I struggled through the same thing once I started with TDD. I've never had problems completing and shipping new products (a solo founder i launched 20 saas sites last year) but after reading dozens of documents about why TDD is an absolute must for any serious programmer my hubris got the best of me and I decided that I too will join the bandwagon. Boy, was i wrong.. Maybe for big teams it is a must but for solopreneurs and 2 people teams I wasted nearly 8 months before i realized that not only my productivity had rock bottomed but I started hating something that I once passionately loved. Since that day I went back to php and angular js.
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 a small team you should probably only TDD the most critical stuff, and not everything. Stuff that has huge paybacks, critical code. Generally I have been reverting to coding first, unless in scenarios where I waste more time trying to manually test it.
You are absolutely correct, but I learned it the hard way.
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.
I am feeling the same. I also bought illusion of superiority for doing it "right". Turns out for small team, SaaS application it is a lot better to "move fast and break things" of course there is "fix bugs even faster" that is missing. But anyway if you prioritise bugs before moving fast all goes well, if not then all TDD in the world with Uncle Bob and Martin Fowler will not help you.
I think it's because I keep changing features, and specs on the fly. The site I plan and the site I actually launch have a difference of day and night and TDD adds a sort of rigidity to that. Creating mocks for API calls, mock Models, etc is just too much overhead.
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.
It's okay not to ship personal projects. No one's really holding you accountable for that. Look at it this way, unfinished personal projects still give you value because you might still be using it in its incomplete state, and you learned something when making it. As you become a more experienced engineer, it's common to have more unfinished personal projects because you have difficulty approaching it with a hacker mindset where you throw all best practices out the window and get it working as quickly as possible. Accept it and try not to lose sleep over it.
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.
You get depressed if you have an idea in your head all the time, but you can't finish it. Or you boggle down your head with details and never end up having something you can show to your second half. That's the problem with shipping personal pet project. You are your own manager unhappy with yourself as an employee.
I have this same problem. My finish rate is abysmal, but I've actually finished a few.
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.
Two things have made a huge different in my ability to finish/ship:
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.
I came here to mention 'Deep work' (which I found a very effective way to do and talked about on HN previously [1]) AND another tactic which is giving me good results.
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 edited that bit out of my post above. I guess it's about prioritization.
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.
You could think of building a scalable back end you don't actually need as a form of premature optimization, and I think the way around that is to evaluate & measure what you actually need - problems you have now, not problems you might have later (no matter how sure you are). @gerlv's suggestion to "Ship daily" is great because it not only forces you to ship often, so you feel like you're getting something done, it also forces to you evaluate what you need, and forces you to quickly get feedback from users that should be the true driver of what you need. (Assuming you want users, rather than a finished side project just for you.)
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.
> You could think of building a scalable back end you don't actually need as a form of premature optimization
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.
> NO MORE TRYING TO REWRITE THINGS IN HASKELL. JUST. GET. SHIT. DONE.
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.
The same thing happens in many other creative endeavors, such as photography. If you don't have a client that needs pictures soon, you can spend months and years reading on the best lenses and techniques and buying new gear.
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.
> If you're using AdBlocker, fair play, I don't blame you. But please consider chucking me a couple of quid: https://monzo.me/ewanvalentine
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.
The number one thing to remember is almost no one cares what tech you used. Just get it shipped.
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.
Totally agreed. It is all about your solution for removing the customer's pain. The sooner you can do that, the better it will be for you and your customer.
One technique that has helped me is what I call "atomic actions". What is the smallest action you can undertake, that you can build upon, which will help you realize your goal?
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.
I feel you’ve been on the right track all along. Instead of doing the opposite on the programming side you might need to do the opposite on the product and selling side. Instead of building something you have no passion for look for ways to sell what you have already created. In other words see if you can productize your "auto-scaling, multi-zone, cloud infrastructure". There’s definitely other people who would like to use that.
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.
> In other words see if you can productize your "auto-scaling, multi-zone, cloud infrastructure". There’s definitely other people who would like to use that.
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.
Infrastructure wise, I'm absolutely guilty of this as well. I have found that there's a middle ground...
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...).
This hurt to read because it's something I've recognized in myself and I've been thinking about how to solve it for a while now. Looking back it was a habit I started long before I ever touched a line of code–I used to sketch and paint a lot but would never finish a piece. Analyzing that I realized I was chasing a "high" that you get from exploring new ideas and even when I wanted to finish something I made it incredibly difficult by not having even a loose idea of what "done" looked like. I think having the "finished" figured out (even if it changes) might help a lot because anything that makes things harder once you're past the fun part is a multiplier for demotivation.
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.
I'm on the verge of completing one of my side projects. The most useful thing that I've found that helps me stay focused is to already have users who you know will want it. By staying focused on you users and what they want, you can stop a lot of this shiny chasing before it starts.
That's where "eat your own dogfood" comes in. It does not replace having real users, their feedback is invaluable. But if you yourself really use the functionality of the project, the production version the others see as well, then you can become yourself the user that pushes you as a developer to get things done and online.
Well, you probably know that. But for me that was important, so I'll mention it anyway.
My side projects usually aren't meant to get completed. I specifically use them to try new things. If it works out, I might use the new stuff in my job. If not, I gained some knowledge.
Some of my stuff is good enough to use (as in early alpha), but doing the final 20% won't pay off anyway.
You are one of the 2/3rd kids who were part of the marshmallow experiment. You cant control your desire for immediate gratification. I feel that with the level that you are in, you need a bigger problem to solve, rather than start a new startup(whatever that is). I know your type, I was like you, most of my friends are like you.
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....
Here's the thing, there's a lot of social pressure in our industry to start a startup.
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?
This is pretty familiar! I've been going through this now with a little game I'm working on. It's been a way to learn React Native. I thought I would be done in a week, but I'm still working on it 6 weeks later, and I keep having to add new features.
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.
I've finished at least 3 major multi-year side projects. One of my open source projects was pretty successful but none of my side projects went anywhere business-wise.
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.
>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.
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.
Keeping things simple is so key. For anyone working on a SaaS startup I would strongly encourage you to do the boring CRUD method using Ruby on Rails or Django or whatever the default framework is in your preferred backend language. Don't get into the JS SPA world, that's a rabbit hole of decision making you'll never escape from.
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. ️
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.
What's the scope of your side project(s)? Do you have a business plan? Who are your target users? Is your code quality all over the map, why and in which modules?
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!!
Consider the psychological angle. ADHD, stress, depression and the like can contribute to these feelings of underachievement and frustration, and a professional can help explore these possibilities.
Perhaps you simply "haven't learned to finish what [you've] started", but sometimes there are deeper issues at play.
Methinks our author is too hard on himself. Tinkering is a slow process that can seem undirected, for decades even.
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've become vastly more productive, productive in the sense that I actually finish things by scoping way way down.
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.
Recently, I found some things that works for me and put it out as a book. Interestingly, I finished the book also using the same techniques. A key trick to keep you motivated is to reward yourself handsomely and IMMEDIATELY if you achieve the goal on the PLANNED DATE. For eg. I rewarded myself an iPhone 7 plus ( which is currently the hottest phone in the market) for finishing the book in 30 days. This helps you overcome the fear of loss that, what if no one buys your product and your effort goes in vain. However I still find marketing is harder! (My book here:http://amzn.to/2iUYaOH )
I disagree. Experimentation is an important part of learning and yes, initially there's a lot of "wooo, shiny!" going on. It doesn't matter - you are STILL learning.
It also helps to remember that software projects are never finished - only abandoned.
I think the author of the post was trying to say that he has disproportionally allocated his time from finishing projects to just learning new things. There needs to be a good balance between keeping up to date with technology and producing something from the technology.
I can relate to this. I created several products that I never launched. Now that I look back, I wish I hadn't been so reluctant to publishing them. Granted, I learned a lot but I wish I launched early and often to get over the psychological hurdle. Most people don't really care about your project anyway.
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.
At the highest level, the trick is to actively do things to increase momentum while avoiding things that reduce momentum. Pick a stack you know, build a way to collect money, release before you've even written code, etc.
I wrote a post titled Side Projects: Avoiding Failures to Launch[1] a few months ago that touches on these same ideas in more detail.
Get to the point where you have something that barely functions, and put it on the web, then constantly iterate it. This is how you "finish" what you've started. I'm totally addicted to learning, and seeing how people use my stuff, so that's what motivates me to get the concept out there as quickly as possible. My only real issue now is having the time to be able to put ALL of my ideas out there. I must have a hundred domains of "ideas" that I want to get shipped.
I've frequently been defeated myself because the project size was too large and too ambitious. Being a perfectionist also really doesn't help, but it's my nature. So I've learnt to instead focus on a wayyy smaller project, and I'm making more progress than ever because well, the finishing line is much nearer.
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.
I often find that when I'm working on a really good side project I severely underestimate the time to finish.
Of the few times I've forced myself to actually finish it ended up completing in the wee hours of the morning.
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.
Maybe part of it is coming up with a project that you consider too inherently important/interesting to experiment on. I feel like there are projects that are essentially excuses to learn a new skill, and then there are projects where you perceive a real need and simply want that product to exist.
I interpreted that not as a cheap shot against Haskell but a warning to avoid constantly chasing the perfect technological solution. (IOW just ship what you've got instead of constantly tinkering)
Many side projects are not shipped because writing code is only a small fraction of actually launching a side project. There are a myriad of other things that need to happen to launch, most of which have little or no relation to writing code.
I keep finishing things. I do MVPs, but they are so simple that noone really cares, and after all the effort I put into them. motivation is gone. So while I'd completely agree with this, every day that goes by I disagree more.
The real problem is that programmers have spent far too much time worrying about efficiency in the wrong places and at the wrong times; premature optimization is the root of all evil (or at least most of it) in programming.
More seriously, it reminds me the time when I was working on a major side project (I was unemployed, so it should maybe called a "main project") and at some point, I started to work on a very nicely crafted library that was necessary for the main project: I lost all interest in the main project and abandoned it for bad reasons.
Make smaller projects, divide things in manageable pieces and define a clear end.. before starting it.
A project never gets finished just because we never stop adding to it..
same problem here but slightly different solution
i impose myself to not start another thing until the previous is done.
doesn't matter how long it takes but i cannot do another thing until the previous is not ready
i know this will bring me to 10-year-long side projects...
I pretty much go to work and code. Then I come home and code until I cannot code anymore and pass out from exhaustion. Good article. Started off with me thinking I actually wrote it. But I think you lack motivation to finish because you are content with the way your life is.
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!
I am a manager. Wanna know why other departments have advantages and yours doesn't? Because they are more important. Truth hurts, I know but bear with me. You've been programming for 20 years and not moved into management. That is a big huge red flag right there. It means you just like coding and don't care about the business. Business always comes first. For you it seems it doesn't. So it's only natural that you don't deserve the same respect as people who think, correctly, that cutting cost and improving profits is the only thing that matters. If you care about the business and care about making a much larger impact, go into management. Don't be a code monkey for life. We already have enough of those.
I do get what you are saying, and what you state is all the more reason why I continue to be motivated to keep working on side projects and getting my business going.
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.
I'd still try to change jobs. I mean you could make double and there is also a chance you don't run into the same types of assholes. I am not saying you won't, I am saying there is a chance. Also, high turnover rate is a big big red flag. Be a part of that turnover rate :). Of course, keep on trucking on your own personal projects and good luck starting your business!
Offtopic: I got quite a NSFW Ad when I clicked through to this. Well depending on the workplace. But yeah not something I'd love a colleague to see over my shoulder.
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".)
"No more big re-writes because there's some hot new JS library. No more microservices for the sakes of it, no more overly ambitious build pipe-lines. NO MORE TRYING TO REWRITE THINGS IN HASKELL. JUST. GET. SHIT. DONE."
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.