What are the first 5 things you do before starting a new project?
Do you always spend a day researching new frameworks? Or, using similar or competing products?
Software Engineering Stack Exchange is a question and answer site for professionals, academics, and students working within the systems development life cycle. It only takes a minute to sign up.Sign up to join this community
This is pretty project-dependent. Is this a project I'm starting with the intent of selling, or a project for a specific customer? Also, what constitutes "starting"? Is that before or after requirements gathering? A rough list, though:
Get a context for the project. That is, figure out what your customer or potential user is trying to accomplish and why. If you're building a hotel registration system, what's wrong with OTS options, for example.
Gather requirements. Meet with stakeholders. Meet with users. Meet with anyone who has a say in the project, if you can. Look at existing solutions that this project will replace, either that the customer is using or that exist in the market place. From there, write it all down in a non-technical language as you can- a good reqs doc should describe what's to be done but not how to do it. Then discuss this doc with the customer and iterate until they agree with it. This step can be less formal for smaller projects (possibly even entirely verbal).
Start making technical decisions. Pick languages, frameworks, ORMs, databases, etc that best solve the problem, whether this means sticking with something you know or learning something new.
Analyze the risks for this project. If this is a government contract, you probably want a 100 page leather-bound risk report. If it's a 3-man 4-month project, you might be fine with some notes in a text file or a spreadsheet. Either way, you want to figure out what can go wrong with the project, how likely it is to happen, how much it'll hurt, and what you are going to do to prepare for it, handle it, and/or mitigate it's effects after the fact. A common one, for example, is "One of the devs gets hit by a bus, quits, gets sick, etc." So you might mitigate that by pair programming to share knowledge, using good source control practices to keep code centralized, etc. Overall, the process of sitting and thinking about what could go wrong and being prepared for the possibilities is more important than actually writing out all the contingency plans.
Set up the technology. It's the sort of thing that no one wants to do once you're in the thick of actually coding, so set up your repo, your build server, your build system, your wikis, your bug tracker, or whatever you intend to use for your project.
I'm just going to answer this part of the question, because it's the only part I could relate to:
Do you always spend a day researching new frameworks?
No. I seriously doubt that could even work... How could someone research new frameworks in just one day, before each project, and learn something relevant? It just doesn't happen that way. Instead, I spend parts of my day, every day, researching different technology (not only new frameworks). Research it's not something I do when I need to. It's something I do all the time and that's already there when I need it to be there. Programming is fun, that's why I am in this business. You can't keep me from trying out different stuff every day.
Does a writer spend a day collecting ideas before starting a new book?