When you are young developer and all you do is writing code, handling projects may be overwhelming. You need to analyse project, create tasks, choose technology, plan your schedule, and so on. I've been there and after many different projects I have created small list used every time I'm working on a new project.
Before you start your work you need to choose tools for this project. And I'm not talking about programming language, libraries or hosting provider. First you need to choose the way to track your tasks and issues (believe me, emails won't do the trick), way to keep tech information up to date and how to keep your project safe.
There is plethora of task management tools out there. Choose one you are comfortable with. In the past I was using JIRA, YouTrack and Bitbucket issue tracker. Currently I'm experimenting with Trello. Your task/issue tracker should allow your clients to be able to view task status and add comments. For you it's important to be able to set deadline and change task status (new, bug, working, done, etc).
Something most developers (even seniors) forget. Always keep your docs up to date. If you are using external services like maps, captcha, social media api, mail server, newsletter integration, and so on, keep all info about it in one place. I'm not saying you should store passwords or api keys. I'm saying you should have one place where you can check list of external services used with short description of integration you have made. The same goes for external libraries. You should be able to track that information without looking into your code. If you are using queues describe those queues and its responsibilities, if you are using database triggers list those triggers. To keep all tech information in one place you can use wiki or store it as a text file inside your project's repository.
By saying keeping project safe I mean having it saved in remote location. In most cases it will be remote repository like Github, Bitbucket or Gitlab. If you don't use migrations, you should schedule database backups (but seriously, use migrations). The same goes for local documents, prototypes and all essential files. But before you send your project out there, double check if you're not sending passwords, api keys and other crucial data.
For this point I will use standard blog app as an example. It seams that blog project can be split into three major logic blocks - authors, posts and comments. That's true, but we need to remember about blocks that are not visible at first - email notifications, authorisation and authentication, etc. It's important to identify all those block properly. It will save you a lot of time when you do it right. Before you go further with your project consult this step with someone. There's a chance you might have missed something.
This one is quite easy. Take each block and describe it with most basic features. For blog authors it would be: author can register, author can create post, author can view drafts, and so on. Avoid descriptions like "post management". This simple term contains creating, modifying, deleting, scheduling, creating drafts, etc. Remember - be as much specific as you can. If you are familiar with UML you can create use case diagram for this.
Having all features described we can create tasks. It is important to create sub-projects/categories based on your logic groups and assign task info those sub-projects. It will help you with keeping order. For each task define estimated work time (just time - 2 hours, 1 week, etc, without dates).
Last step is to define relationships for your tasks. Maybe it sounds trivial but it's important to know what needs to be done first. That way you will be able to put dates on your tasks and create project's timetable. Assigning dates manually can be a frustrating job, especially when there is a lot of tasks. The best tool you can use to make it easy is a Gantt chart. There are apps for that but the best ones are most expensive.
If you follow above steps you will find that running projects isn't that hard as you thought it will be. Moreover you will gain control of your project schedule and you won't miss deadlines ever again (assuming you set task date in reasonable way). In next post about project management I will list apps and techniques that can help you with managing your projects.