What makes a good project
There is no list of approved project types, and this page is not one. It is about the difference between a project you made and a project you produced to have something to submit, because reviewers can tell, and because the second kind is a waste of your evening.
The actual test
Would you have built it anyway?
If the honest answer is “no, I built it because I needed something to ship”, you have picked the wrong thing. Not because it breaks a rule, but because you are about to spend ten hours on something you do not care about, in exchange for stars you could have earned building something you do.
Everything below is a longer way of saying that.
Why not another tic-tac-toe
Nobody is going to close your project for building tic-tac-toe. It is just a bad trade for you.
A tutorial-shaped project (tic-tac-toe, a to-do list, a calculator, a weather app that calls one API and prints the result, a portfolio site) has been built ten thousand times. The path is known, every decision has been made for you, and there is nothing in it that only you would have done. It teaches you the least per hour of anything you could be doing, and it gives a reviewer nothing to verify beyond that the hours passed.
They also tend to attract suspicion they do not deserve. When a small, well-trodden project claims a lot of hours, a reviewer has to ask where the hours went, and the answer is usually in the tutorial rather than in the project.
What tends to be good
- Something that annoys you. The most reliable source of a real project is a thing that is broken or tedious in your own life. A script that renames your files the way you want. A bot for the group chat you are actually in. A tool for the game you actually play.
- Something you want to understand. Emulators, compilers, ray tracers, physics engines, database engines, kernels. Not because they impress anyone, but because building one is the only way to stop them being magic.
- Something silly you find funny. A genuinely stupid idea, executed properly, is a good project. See the Bad UI card for an entire category of this.
- Something niche and yours. Software for a hobby almost nobody shares. Those are frequently the best submissions we see, because nobody could have written a tutorial for them.
- Something you already started. An existing project is welcome. All the time on a linked Hackatime project counts, including from before Crescent began; reviewers can see when the project was created and handle the earlier time deliberately.
Scope
Small and finished beats large and broken. A tool that does one thing properly, with a README and a working demo, is a better ship than an ambitious half-built thing nobody can run.
If you want to build something large, ship it in stages. Ship the first working version, then keep going and ship again. That is how re-shipping is meant to be used, and it pays better than disappearing for two months.
Tutorials and assistants
Both are allowed. Both need declaring in your description.
The line is not “did you get help”, it is whose project is it. Following a tutorial and then taking the thing somewhere the tutorial did not go is a project. Typing along with a video and shipping the result is the video’s project. Building with an assistant that helps you along is a project; prompting something into existence and shipping it without understanding it is not, and it will be paid for the hours you can demonstrably show.
Write your README yourself, in your own words, whatever helped with the code.
Saying “I followed a tutorial for the first half” has never cost anyone a ship. Hiding it has. See AI and tutorials.
Before you commit an evening to it
- Can you say in one sentence what it does, without saying “it’s like X but”?
- Will there be a moment where you have to work something out yourself?
- Will somebody be able to open the demo and get it in ten seconds?
- Do you want to see it finished?
Four yeses and you have a project. Otherwise pick something else. There is no shortage of ideas, and the cards exist precisely to hand you one when you are stuck.
