All right, we have a big idea, a complete revolution, something as never been seen before, but we have no idea about how to develop it or we don’t knowing where to begin. I am not going to make this post into a software engineering lesson, but I would like to talk about my experiences developing projects from scratch and what I have learnt in other projects specially those that they had started before I became part of them.
Well, we have the idea so let’s start with the project. One of the biggest mistakes when a project begins is to believe that documentation is not important or necessary. Oh! boring documentation… how much I miss you sometimes… The truth is that documentation is more important than people think and that is why it is worth devoting some time to analyze what we want to develop. So, the first step is clear: Analysis. But, what should we analyze? From my point of view, the first thing we should think about is a software development process (waterfall, prototyping, spiral, etc) or why not, an agile development method, such as SCRUM or extreme programming. Regardless of the process or method we choose, it would be interesting to devote an initial time to do some of the following task:
- Draft out a scheme about the architecture of the project: how we are going to build our application, the different elements involved in our system, such as a mobile application, a management web application, web services, data storage, etc; and how those elements will interact between them. It would be interesting to think about the tools, languages, frameworks, etc., we need to develop our project, for example, Android for a mobile application, but navite Android or a development framework (Apache Cordova, Xamarin, etc)? Will we need a backend? If so, how will we develop the backend? Should we use a traditional approach with Java or a Java-based framework (Spring, Struts, etc.) and a Java server such as Tomcat or WildFly, formerly known as JBoss? Or should we try a new approach such as MEAN stack?
- Make a list of the software requirements we need to develop the project. I think this is the most important document for a developer (commonly named SRS or software requirements specification). We should describe how our software should act describing all details about our application. This could take a lot of time depending on how big be your application. We should describe all kind or requirements, functional and non-functional requirements. The first ones describe the what the system should do (business logic, authentication, authorization, audit tracking, etc.), and the second ones specify how the system performs a certain function (performance, scalability, capacity, security, data integrity, etc.).
- Design the UI. We should know how our user interface will be so we should draw the user interface and specify colors, themes, position of the elements, etc. Think about the user experience! If we have a web application, maybe it should be responsive, the application should be accesible, etc.
In an agile world, it’s supposed that these steps are made in each iteration of the different sprints in which the lifetime of the project is divided into. For example, the requirements are written as user stories, and each user story has one or more tasks that describe what the client (in this case the client will be ourselves) wants the app do. The tasks could be the requirements in a traditional development process and are grouped into user stories. If we need to add new tasks or user stories it would not be a big problem, because in an agile approach, this kind of situations are taken into account.
In summary, once we have an idea, the next steps are: draft a global vision of the whole project, make a list of the main requirements to start with, design the UI and UX of the application or applications. That’s it!