Live data from Hacker News

The art of over-engineering your side projects

elsyms.com

11–20 of 272 posts

Re: The art of over-engineering your side projects

#11
post #10

> 4. Use frameworks and customise them – only refactor/build your own when absolutely neccessary. > 5. Build your project first – then worry about continuous delivery. These contradict each other. Building your own deployment system is just as much of a distraction as building your own CSS framework.

Why do you need a deployment system if you have nothing to deploy? Build the project locally, then use continuous delivery when you have something to deliver.

Re: The art of over-engineering your side projects

#12
“I know: I’ll create a triple zoned redundant architecture with pub/sub database replication, a 32 node Kubernetes cluster and private networking across all regions – that way, I can handle anything!”

The good news is, once you've done that, you can get a pretty decent job.

The majority of software engineers seem to be under the illusion that potential customers care about the stack they are running.

This is not entirely true. The technology do surface in terms of user experience. It does in the details: app start, ui responsiveness, etc. I'm writing a game using go right now, and the end user can tell it's different because the user's cpu seems more powerful.

All in all, I think those are good mistakes, not bad ones. I wish more engineers could spot over-engineering, and they don't until they did the mistake a couple times. Side projects are, I believe, how one really learn to write programs. I think the right advice is: do whatever you want, do all the mistakes. How can you write a successful side project anyway if you never learn how to write a program? Also, the worse type of programmers are the ones telling you about over-engineering because they read about it in a blog. Code more, read less, I guess should be a good motto.

Re: The art of over-engineering your side projects

#13
post #10

> 4. Use frameworks and customise them – only refactor/build your own when absolutely neccessary. > 5. Build your project first – then worry about continuous delivery. These contradict each other. Building your own deployment system is just as much of a distraction as building your own CSS framework.

Your "deployment system" could be a 20-line systemd service and a git checkout. You deploy with a "git pull" and "sudo service restart".

Re: The art of over-engineering your side projects

#14
post #9

For me it's very important that I don't discuss projects with friends / family / colleagues etc. until I really have something to show. I have always found it very easy to talk all the energy out of a good idea before I've even got any real work done.

That's a thing. Expressing in public your desire to achieve something makes you less likely to deliver.

http://www.psych.nyu.edu/gollwitzer/09_Gollwitzer_Sheeran_Se...

Re: The art of over-engineering your side projects

#15

“I know: I’ll create a triple zoned redundant architecture with pub/sub database replication, a 32 node Kubernetes cluster and private networking across all regions – that way, I can handle anything!” The good news is, once you've done that, you can get a pretty decent job. The majority of software engineers seem to be under the illusion that potential customers care about the stack they are running. This is not enti…

"A customer will not know or care if you are using Ruby, Go, PHP or any other language as long as what you have written is performant and is fit for purpose (which all modern languages are)."

Where games are concerned I'd tend to agree (though Minecraft was built in Java and was TERRIBLE for the first couple of years, now look at it).

Re: The art of over-engineering your side projects

#17

Lots of times I use side projects as a way to explore new stacks, deployment approaches, etc. The goal of the project is not to deliver anything, it's to learn so that when I go to do my next "real" project at work, I know what works well and what doesn't.

Me too, I think there are two types of side projects, this article focuses on those which I believe people will try to generate a business out of, or at least some form of passive income.

But there are also some side projects where you just want to get your hands dirty with some different tech, if you do deliver something then you can showcase it on your portfolio. I know when the app store gold rush first started a lot of people did this as experience to get iOs dev jobs.

Re: The art of over-engineering your side projects

#19
The article has good points. But the term "side project" implies working on something that isn't part of your job. I think looking at your project from that perspective can also be a step in the wrong direction---if you enjoy what you do, work is just one such application of your knowledge and ability. Projects you do outside of work are another, and may even be more important to you than work.

A number of commenters point out that many side-projects to them are to explore new concepts/libraries, or as a means of learning. If it's for the sake of learning for your job, then yes, it'd be a side project.

But if you're looking to take a project to completion (the author talks about products; my projects aren't), I find that using it as a learning environment extremely detrimental. Yes, you do learn things over the course of development---through research, struggle, and growth. But if too much of your time is spent on things you don't have a good foundation on, you may burn out too early, wind up frustrated, and wind up with a mess that leads to refactoring. Use a foundation that you have experience with and know well, and learn the parts that are necessary.

(I do distinguish, though, a research project with a project for playful learning. The former is much more formal and disciplined. But you can still burn out early.)

Re: The art of over-engineering your side projects

#20

Lots of times I use side projects as a way to explore new stacks, deployment approaches, etc. The goal of the project is not to deliver anything, it's to learn so that when I go to do my next "real" project at work, I know what works well and what doesn't.

I do that too, but make that my secondary goal. If it fails, at least I got to improve my skills on whatever technology I chose to build it in. It helps me push along when it gets to the dull parts.
Post reply on HN