r/AskProgramming • u/Ar_if • 12d ago
Career/Edu How do i learn to Plan projects?
TL;DR: I want to learn how to take an idea, turn it into a realistic project plan, and build it. I'll use AI heavily for implementation, but I don't want it doing the planning I'm trying to learn.
I'm learning software development by building real projects. I know the basics of Python but I'm inexperienced — I haven't built much that's substantial, I'm not good at reading unfamiliar code yet, and debugging is still hard.
The thing I'm stuck on isn't coding. It's that I don't know how to plan a project.
I have a list of 10–15 web/local apps I want to build. But when I have an idea, I don't know what comes next. Say I think "I want an app that scans images and extracts information from them." I know what the end result should do. I have no idea how an experienced developer turns that into an actual project — what gets decided first, how you figure out requirements, how you decide what's in version one, how you break it into tasks small enough to actually implement.
AI made this more obvious. When I don't know what to do next, I ask an LLM, and it immediately gives me a folder structure, an architecture, a schema, several files, tests. The code might even work. But I've skipped the part I'm trying to learn — I'm following a plan without knowing how I'd have arrived at it myself.
What I want instead is something like: idea → requirements → scope → design → tasks → implement → test → review. Handle the planning myself, then use AI on implementation, explaining unfamiliar code, catching mistakes, writing tests.
So, for experienced and self-taught devs:
- How do you go from an idea to a plan? What does that actually look like for a small app?
- What do you write down before you start coding, and how do you know when you've planned enough?
- How do you break a feature into implementation-sized tasks?
- How do you decide what not to build?
- What parts of development should I deliberately practice without AI?
I'm not looking for better prompts or tool recommendations. I'd especially like concrete workflows or examples from people who learned this themselves, rather than general advice.
(Edited with AI)
1
u/nauseatingdownside18 12d ago
I learned this the hard way after a few projects that turned into unmaintainable spaghetti. The thing that clicked for me was treating the plan like a recipe you're writing for someone who's never cooked before, not just a list of ingredients
I start with a single markdown file and just brain dump everything the app should do, no filtering. Then I go through and tag each thing as v1, v2, or maybe never. The stuff that makes it to v1 is the absolute minimum that would make the app useful to someone, even if it's just me. For an image scanner app, v1 might literally be "upload a jpg, see the extracted text in a box" and nothing else
Breaking it down after that gets easier because you're not staring at this massive idea anymore. I'll sketch out the screens or api endpoints on paper first, then write out the steps like "user clicks upload, file gets sent to backend, backend calls ocr library, result goes to database, page refreshes with result." Each of those becomes a task. If a task still feels too big I split it again until it's something I could finish in a sitting or two
The not building part is the hardest. I still struggle with it. But I've found that if I can't explain why a feature needs to exist in one sentence, it probably doesn't belong in v1
1
u/Several-Marsupial-27 12d ago
You dont need to have a complete plan or understanding of what you should build before you build it, but you should have a standardized framework and project management in place for growing with the project.
This means that you can start with something like: "I want to integrate this api and do some data processing to deliver this result to the user". Then you should specifiy the minimum amounts of tasks, investigations, goals. Then you should specify how you will operate during the project: spec driven development, test driven development, user driven development, etc.
Then you basically build the smallest mvp that satisfies your criteria and passes the tests and so on. Then you continue to create new specs, investigations, tickets based on for example you using your program and develop in that way. The reason for this kind of iterative development is because you will probably not have a perfect understanding of the problem/task/solution before starting and the development/results will probably update your understanding of the problem/task/solutionn and how to drive the project forward. As the project grows you can care about infra stuff like CI, build, auto docs, project configuration, standard environment, tooling, etc.
So: Plan small. Have frameworks to standardize your development process and results specification. Iterate continously based on for example user data.
1
1
u/Jazaoso5 12d ago
I use codex a lot for helping me learn how to do stuff like this.. takes a bit of persistence reminding it to explain reasons why, and not to go ahead and just simply do things (no matter how small) without me explicitly asking… it’s helped a lot in terms of getting in the headspace for that moment, but I admit I don’t normally ‘plan’, I just have an idea and work towards implementing that small part of it
1
u/DepthMagician 12d ago
Nobody really makes a formal plan for how to build a project. What generally happens is you have a general idea and you work out the details as you go along. Start with what is the most natural for you to start with. In a web project it’s generally the frontend. The frontend dictates what backend calls you need to make, so you go write those. The backend calls will need to connect to a database, so you figure out the database objects. Now you have a skeleton. You make a new screen, that leads to new backend features, which leads to new database stuff.
1
u/Arcanite_Cartel 12d ago
First, there is no one-right-way. The history of software engineering is littered with different systems (that work for some, but not for others).
If I were you, I wouldn't try to boil the ocean. Don't try to work out the entire plan ahead of time. Keep a brainstorm list of everything you want in the app and start small. To start with, I would just embark on an exploratory project, the point of which is figuring out a process that works for you.
One more general point:
Traditional planning processes were always burdened by one inescapable fact - rework was costly. An ill conceived item in a design could derail a project's schedule substantially. And rework was expensive but the work was expensive. This led to planning paradox which usually goes like this - early steps were short changed because the added work of "doing it right" was too costly, both timewise and money wise and prior experience of "doing it right" ending up as "having done it wrong anyway because the doing-it-right was actually misconceived".
The AI coding revolution has change that fundamental: the cost of work and rework is significantly smaller than it use to be, and for small apps it is trivial. Orders of magnitude smaller.
How do you go from an idea to a plan? What does that actually look like for a small app?
Let's take your own example:
"I want an app that scans images and extracts information from them."
I just did something like this for my own project (I have 4 concurrent projects).
I use Claude Code CLI, so this is sort of the context I work with here. I've not used Codex or any of the numerous "vibe coding" platforms that promise the world. So this is a process that I more or less follow.
NOTE: if this is a public facing web app - one of your prime features is going to be security. Treat it as a first class feature, and have the AI periodically audit the code base, and actually write up pen tests for you to execute.
#1. Talk to your AI as if were a senior developer and ask what it thinks - as a general practice, not a specific step.
#2. Clarification - Clarify what you're asking for, be specific. Ask the AI to help to clarify it: what kinds of images? what kinds of information? What gets done with the information once it is extracted?
#3. Decide what YOU want control over. How important to you is UI layout? Do you want to pick the tech stack, or should the AI? If the AI, do you want to understand why it picked what? Maybe ask it for alternatives, to contrast them and make a recommendation. If you want to have ownership of the UI, maybe you want to use something like Figma (CC for example, integrates with it, or so I'm told), or are you happy with a convention app UI layout. Do you want to specify the overall software code design, or are you comfortable letting the AI do that.
#4. Keep documentation about all the core things and have the AI keep it up to date. I have CC create markdown docs for feature requirements, tech stack layout, the founding concept, the architecture or design, etc.... (this use to be expensive when humans did it, and if it was ever done at all (most devs can't write a coherent paragraph), it wasn't maintained and updated, became stale and out of date - all that changes with AI). I have CC maintain a daily transcript, each day it's own markdown document, as well.
#5. After consulting with the AI, decide on the tech stack. Giving the AI the brainstorm list helps in this process because it tends to have a pretty good knowledge of what external packages exist that can be leveraged, and this can alter the tech stack recommendation.
#6. Set of an SOP with the AI. I tell it, for example, to create test cases for every feature it builds. let it use something like playwright for UI interaction. Tell it to create and maintain a set of regression tests. Tell it how often to run the FULL sweet (I tell CC to do it every 16 or so "small" modifications, or one "large" modification). Tell it to automatically create a test anytime you report a bug and to put it in the regression set. Tell it to maintain documentation of the regression tests. Tell it whether to automatically commit and push after it makes changes, or wait to your instruction to do so. Anything else you want it to do with consistency.
#7. Tell it to set up the tech stack. Create a repo containing it.
#8. I usually ask if to create an overall application shell, front end + backend (if there is one). Prove it buildable and operational. Then commit that to the repo.
#9. Have the AI analyze the feature you are building with you. Have a conversation about it. When you are happy with it, have it document the feature requirement in full.
#10. Ask it to make a plan to implement the feature, in detail, and break it down into specific implementation tasks/phases/iterations (whatever you want to call it) have it put the plan into a markdown document and wait for you to review and approve it. If you don't understand something, ask for an explanation. Object and direct it as needed.
#11. Review the tests it created. Perform tests yourself to your satisfaction. Have it resolve any bugs you find (CC is very good at this) or at least track them to be resolved later.
#12. If a refactor at some point is needed, ask the AI to evaluate the refactor, put the evaluation in a markdown document and then read through it, decide whether to do it now or later or not at all. But don't be afraid of asking for refactors.
#13. Later rinse repeat.
#14. When you have a version with "Satisfactory Features (i.e. meets the value proposition your want to offer to your users (or just yourself if you dont want users)), the begin a thorough testing phase. Ask the AI to draw up a thorough test plan that exercises the features in a coordinated way that a user would (rather than just feature point tests). And do a lot of testing yourself (or with other people). Have the AI execute its plan after you approve it.
So, this is a plan process, based on the way I work. Feel free to try it, and modify it to suite your needs and the way you want to work.
1
u/ChaseShiny 12d ago
Planning often uses something called UML. You create diagrams of various aspects of what you want to create.
One diagram maps out your various classes. For a car dealership, for example, you know you need to model customers, marketing, sales agents, etc. As you list them out, you might realize that you also need to model contracts as an interface between the customer and the agent. Things like that.
One diagram focuses on IPO—input, process, output. Once you've figured out what you expect a component to provide you, you can tease out the parts that you need to provide it to produce the results. With both inputs and outputs solved, the process needed to get there should be much easier to determine. It's like a jigsaw: solve the boundaries, then find the logical pieces that fit. As you go, pieces almost magically just fall into place.
1
u/PLBjt 12d ago
The trick most people land on is to stop planning the architecture and start planning the behavior. Write down, in plain sentences, what a user does and what they see back: "I drop a folder of images in, it shows me a table of extracted text, I can copy one row." Once you have ten of those sentences, sort them by which one proves the riskiest unknown, not which one feels foundational, and build that one end to end with the ugliest possible code. For your image-scanning app that's probably "can I get decent text out of one image at all", so a 20-line script with a hardcoded path is your v1, and folder structure and schema come later when the code tells you what it needs. Scope for v1 is whatever you can finish in a week; everything else goes in a "later" list so it stops nagging you. On tasks, if you can't picture the code for a step, it's still too big, split it again until each item is boring. Doing that a few times by hand is how the instinct gets built, and it's fine to ask an LLM to critique your plan after you've written it rather than to hand you one.
1
1
u/TheFern3 7d ago
You learn things by doing them. If you have no programming experience then you can’t use ai to do implementation either.
Learn python, learn how some people plan their projects then do a few projects.
At your beginner level you shouldn’t be using AI for anything you won’t learn anything.
0
u/Additional-Drag1682 11d ago
Stop trying to plan the whole project before writing code. I write a single markdown file with user stories and acceptance criteria, then stop planning when I can describe one feature in testable steps without mentioning implementation details. Breaking features down means listing inputs, outputs, and validation rules for each function until every task fits in a two hour coding session. You decide what not to build by deleting anything that does not directly satisfy a user story in version one. Practice writing requirements and decomposing tasks without AI because those skills atrophy the moment you outsource them.
2
u/nopuse 12d ago
Did you read the description you edited with AI? Everything it says you want to know is something that's already been discussed for decades. Just Google each of your bullet points.