Overview
The eBOOKFAIR is a full-stack e-commerce site, developed as a team project in the fall of 2023 for my Software Engineering course (CS 3773). It consists of a Django web application connected to a MySQL database, using the contents of the database to populate HTML templates with individual product info. In addition, the application includes basic search functionality (to search products by name or description), as well as the ability for a user to create an account on the site. All of this is served on a responsive Bootstrap web interface, styled with a color scheme like that of a Scholastic Book Fair—with the items on the store also being a call-back to these classic book fairs.
This project was my first foray into creating a full-stack software application; my work previously consisted of standalone websites or app demos, but this was the first time that I worked on a project that could be considered a “full stack”. In addition, this project also introduced me to a few agile development practices—such as the use of product backlogs, and the formal designation of a “product owner” within a software development team. In turn, that means that this project, up to this point, had been my closest experience to a real-world development project; and while I am certainly proud of the work that me and my team members put together, we also faced several challenges that ultimately affected our final product. Ultimately, I feel motivated to describe this project as a steppingstone towards becoming a more conscious, well-rounded software developer.
When this project was started, it was devised as a simple, multi-tier application; a client would connect to a web server backed by a Django application, which would then interact with a dedicated MySQL database server. Our choice to use Django was motivated by our initial lack of experience in Python—since most of us only had a background in C/Java development, we felt that using Django would allow us to diversify our programming experience. On the other hand, MySQL was selected as our database engine partly because of our familiarity with it, but also because it served as a prime, free, robust solution for an e-commerce site—its relational model is particularly appropriate for small-scale commerce, where data integrity is crucial but data variability is low.
I was pinned as the project owner, giving me the responsibility to manage a product backlog, and define the individual responsibilities within our team; however, even after this backlog was initialized, we were still slow to roll out a prototype—it took about a month for a skeleton website to be put together. Issues like this led me to my most significant takeaway from this project: there should always be a deadline to meet! It is extremely difficult to manage a team of college students without a deadline, especially when trying to balance the needs of individual members against the needs of the project—but instilling a sense of urgency can prevent a project from devolving into a “race to the finish.”
Unfortunately, our unstable pace throughout the semester led to some shortcomings in our final product. For example: the application was hosted on a single development server, rather than the multi-tier architecture proposed in our initial design; the site did not include shopping cart functionality; and it did not include checkout functionality. While some of these shortcomings could have been addressed using 3rd party solutions (a strategy chosen by some of our classmates), the core issue at hand was the difficulty in effectively tasking and managing our team—leading to some team members (including myself) being swamped with tasks at the end of the project’s development. Our challenges were not limited to team organization hurdles, either: Django limitations (such as the inability to use a composite key) led us to change our database schema multiple times, and the droplet’s hardware configuration led to performance challenges during development.
However, regardless of these drawbacks, I am still immensely proud of the product that me and my teammates put together—and it has strengthened my belief in the need to be both a good, flexible team member and an effective leader. Outcomes like these should serve as a chance to reflect and become a more conscious leader—one which is acutely aware of what can prevent and allow the successful delivery of a software product.
Methods used
Skills
- Ability to manage and host a development environment on a command-line Ubuntu Linux virtual machine (DigitalOcean Droplet).
- This involved the need to set up a virtual Python environment, which simplified the need to install various Python packages.
- This also involved systems administration work, including the need to set up users for members of our development team, managing system resources, and writing instructions for using an SSH tunnel to connect to the droplet.
- Understanding of the Django web framework, including:
- Its use of HTML templates to dynamically build pages on top of a common base.
- Its use of Python class- and function-based views to decide on what to display and how to handle user input.
- Its way of managing and representing database objects using Python model classes.
- Ability to administer the MySQL database management system.
- This included the need to import product data from the CSV format into the structured database.
- Understanding of Git’s functionality, such as making commits and creating branches to perform non-disruptive development.
- During the course of this project’s development, I used branches to develop product features (e.g., user signup, login, profile) to keep our main branch’s working version intact.
- Layout and user interface design skill, in creating an intuitive and easy-to-use web marketplace interface while maintaining a consistent brand identity.
Software, tools, and libraries
Project files
GitHub repositoryMedia credits
Thumbnail and demo article video were created by me. Django, Bootstrap, MySQL, DigitalOcean, and Git icons created by Icons8.