Sunny’s E-Commerce Website
Sunny owns a bookshop, which is doing reasonably well, and he wants to offer his services online via an e-commerce website. He starts to do some research on how to build a website.
After few days of searching and reading blogs he puts down his options.
1. Hire a freelance developer who can create a website for him.
2. Use a website builder and try to create a website on his own with some help from a freelancer, which may cost him less.
3. Learn programming and start building a website from scratch.
In your view which approach makes sense?
Here are some basic points worth evaluating:
- The approaches may work but if he gets lucky and the website traffic goes up then he may be in some trouble. How will the system keep up with the traffic? The website may need more storage, how will that be handled?
- Has evaluation been done for handling software and hardware updates?
- Have all the site features been identified?
- Has website security been considered?
In short is the website development following any process?
Most of the Software Projects fail because they lack a proper methodology. In fact the rate of success for a software project is much less compared to other disciplines. Like construction of a bridge, a building or a house.
This is the primary reason why an Engineering based approach is needed.
It requires following a set of proven principles and best practices, which borrows heavily from other Engineering disciplines. Consider building a bridge or for that matter building a new house. They follow a process which eventually results in a building that can survive tests of time.
Coming to Sunny’s website the following basic features are needed in the website, to start with-
1. Website should be able to fulfill all the requirements. As per Sunny basic requirements are — customers should be able to view books, search for books and place orders. This can be enhanced in subsequent versions. Of course the site should look good too.
2. Website should be up most of the time. Especially during peak hours.
3. Website should be easy to maintain.
4. Website performance should be good.
5. As website traffic grows we should be able to scale it by adding more resources.
6. Making changes and adding new features should be easy.
7. The website should be secure.
The first requirement comes under functional requirements. And the remaining come under non-functional requirements.
So how can we ensure Sunny get’s a good end product which fulfills these requirements?
Let’s see the steps at a high level that can be followed. Each of these are important and if not done properly can lead to project failure. Let me add that at the minimum the team we need must include — Project Manager, Business Analyst, Technology Architect, Software Developers, Testing Team and someone to manage the Infrastructure.
In startups it’s pretty common to find someone wearing multiple hats at the same time, which is fine as long as the person knows what he/she is doing.
The Project Manager needs to do thorough planning and ensure project follows a strict timeline.
1. Requirements — The requirements needs to be captured clearly by some professional. We usually involve a Business Analyst at this stage. It’s important that BA captures both the functional and non-functional requirements. The BA can then come up with data flow diagrams, ER-diagrams etc. which define the various features and how they are expected to work. This cycle can take some time. Once the requirements have been captured they need to be reviewed with the Sunny. A sign off is needed from him to proceed to the next stage.
2. Possible Cost & Effort estimates — Based on prior experience a rough estimate can be given to Sunny which can cater to these requirements. It can help him decide if he wants to wait or go ahead.
3. Build Mockups and Prototypes — This step is optional but can help give Sunny a better idea of what he can expect to get. The prototype does not implement the features yet.
4. Architecture — Once requirements are in place the BA team will share it with the Architect. Role of Architect can include, but not limited to:
- Come up with a high level design or blueprint.
- Identify how system can meet the functional and non-functional requirements.
- Identify the main components.
- Identify reusability.
- Identify external systems and any integrations needed.
- Identify constraints.
- Perform capacity planning.
- Do a cost-effort analysis.
The Architect can then drill down to create a detailed design of the system like
- How all the pieces can work together.
- Which technology stack can be used. Which frameworks.
- Define API’s.
- Identify the version control process and also how to build and deploy the changes. An incremental approach is helpful.
- Share the coding best practices with the team.
Some time should be spent towards the research and evaluation of possible solutions. To choose the right tools for the job. Architect can involve developers to provide inputs and should then come up with a plan to implement the features.
5. Development –Once the designs are in place they are reviewed and then passed on to the developers. Having competent developers who have prior experience in the technology stack is needed. The developers should also be able to do unit testing of the code they write. They should also understand the design and work closely with the Architect.
6. Testing -Both unit and integration tests should be done to ensure requirements are met.
7. Performance Test -Load testing should be done to identify bottlenecks and break points.
8. Code Deployment -Deploy the code to production environment. Plan and prioritize next set of features, defects etc.
General Guidelines
- Following an incremental build / deploy approach is recommended by having short sprints. It’s good to showcase features to client and get his feedback. The fail fast approach.
- In all these steps proper reviews must happen to ensure there are no last minute surprises.
- Proper planning is the pillar of this process. If timelines are not being met then Project Manager should have plans to address that. End of the day no one wants to pay extra.
- Daily status update can be done to check progress.
This process can improve the chances of projects success. More than that ensure a quality product.
I have covered some of the important aspects here. There is more to Software Engineering though and hence the need for experts. I hope this proves to be a good starting point to help you make better choices.
In next article I will try to address Scalability and other non-functional requirements.
You may want to enhance your knowledge by reading:
Please don’t forget to share your thoughts and which approach you may prefer to take.
Image Credit
By BlairSnow [CC BY-SA 3.0], from Wikimedia Commons