Category Archives: Sprint-3

Sprint Retrospective 3

The third and final sprint of our semester was eventful and successful for our team. We made great progress on many of our major tasks. It was a relatively smooth sprint with only a few resolvable issues. Our communication was on point, and we remained entirely transparent about our goals for the sprint. The focus of this sprint was finishing the guest info system’s installation and setting up subsystems as we went forward. We successfully worked with another team to fix the formatting on the guest info system and we now have a stable build. Our team also completed port mapping, and created a table for our ports. We also have a working landing page (missing Keycloak) and the beginning of a working weight-based inventory system. We set fair and manageable goals throughout this sprint, and prepared the next teem excellently for the tasks to come. We are fully pushed to gitlab with all our important information, and we have documentation to guide future teams. I spent my time doing three major tasks; getting the guest info system working fully, researching different ways to handle multiple docker compose files, and beginning work on the weight-based inventory sub-system.

What I thought didn’t work well in the sprint was the time crunch on our issues. While we made great progress, due to the upcoming presentations and end of the class we did not finish as much as we’d have liked. We left some tasks incomplete to a minor degree, although we are proud and happy with the work we made. I would personally have liked to finish the inventory sub-system. I was unable to do that due to time constraints at the end of the semester. We were working on getting the guest info system working up until that point. 

As a team our biggest weakness is our shared lack of knowledge in the subject, requiring us to pool our brains for certain tasks. While we worked independently to a great degree in this Sprint (an improvement from the last two sprints), I feel that due to the complexity of our tasks, we did not adequately work independently where we could have. A lot of time in my opinion was lost to this communal working, although we did get farther than expected with the sprint. As an individual I could improve better at communicating my work. During team work class I am not immediately vocal with what I am working on, and although I am making progress I am not being entirely transparent with my team. Going into future work I will be more transparent with my work, having learned from this experience.

The apprenticeship pattern that best describes my work in this sprint is Walking The Long Road. I felt that this fit because of the work I was doing throughout this sprint. While I could have stopped coding and cleaned up with more clerical work, I continued to remain persistent with adding features and improving our server. This led me to research merging docker compose files and adding the inventory system, which became an excellent end-of-sprint addition. Teams in the future will benefit from this addition, as they will have an easy portion to implement into the server to get their feet wet. By remaining consistent at improving my abilities, I avoided resting on my laurels and considering the job done before it had been completed.

My tasks:
https://gitlab.com/LibreFoodPantry/client-solutions/theas-pantry/deployment/gitlab-profile/-/issues/25
This was my earliest task, involving fixing the disconnecting backend. Working with Professor Wurst and Cameron, this was completed.

https://gitlab.com/LibreFoodPantry/client-solutions/theas-pantry/deployment/gitlab-profile/-/issues/10 

This was my major task for this Sprint. I spent time making sure the guest info system was running smoothly, as well as adding new subsystems to test towards the end of the sprint. 

From the blog CS@Worcester – WSU CS Blog: Ben Gelineau by Ben Gelineau and used with permission of the author. All other rights reserved by the author.

Software Development Capstone, Final Sprint Review

For my final apprenticeship pattern, I wanted to find one with a message that I could take with me into my future work with software development that would continue to help me improve after my academic career has ended, as well as even years into a professional career. Chapter 5’s Expand your Bandwidth touches on this topic, and explains how one can expand their knowledge beyond the context of what is needed in a specific project or job.

With regards to experience and knowledge, the two common pitfalls a developer can find themselves in are having only an understanding of the tools needed for their specific role, and only possessing a surface level understanding of the knowledge they have. Personally, I believe that these two problems have the same root cause; when you only concern yourself with what you need to know for your work, your knowledge stagnates and you exclude yourself from experiences that would improve your craftsmanship.

The book places emphasis on the value of the desire to go further and learn more in unique and unfamiliar ways. The common examples of attending professional development and technical conferences and events, as well as using online courses and videos about new topics, are present. However, the idea of looking through forums and mailing lists to find other people’s problems and replicating them to solve them, was a new one for me. Of course I’ve used sites like StackOverflow before, so I knew that this was something one could do, but I hadn’t realized the value it had in improving my own knowledge.

Expand your Bandwidth begins with a quote from Jim Highsmith, author of Agile Software Development Ecosystems:

“Learning about what we don’t know is often more important than doing things we already know how to do.”

A great way to summarize the value of going the extra mile to learn more, and a message I want to keep in my mind for my future in software development.

In our final sprint, I focused on the integration between the database containing the visit info and the backend code we’ve developed to generate the report. This meant refactoring the backend code to accept and parse data from RabbitMQ, as well as handling the connection itself. The connection between RabbitMQ and the backend has been causing issues, and needs further debugging work before it can be deployed.

Reflecting on the sprint as a whole, I’m not completely satisfied with my own work. The original plan had been to develop testing for the backend code during the sprint, which I spent two weeks working on before deciding the connection between the database and backend was more critical to the functionality of the project, and needed priority. Compounded with the problems that arose during development and debugging, I wasn’t able to finish the work within the duration of the sprint. I believe choosing at first to work on testing was a mistake on my part, and that poor planning contributed to not meeting the goals my team had set. However, I also believe that the work that was done on the backend code was productive and is very close to completion. For future work, I want to improve my planning and time management by allotting myself some time during the sprint planning as extra time, in case a feature or issue ends up taking longer than anticipated. This way, I will be able to afford setbacks such as those that occurred this sprint.

Link to updated most recent commit

From the blog Griffin Butler Computer Science Blog by Griffin Butler and used with permission of the author. All other rights reserved by the author.

Sprint 3

During sprint 3, I kept working on the frontend, like the last sprint, I had been stuck trying to get the backend up, while trying to work on the frontend. I had a teammate work with me for this sprint to complete it. We worked on two different branches, mine and Jason’s.  Inside my branch, I was having a problem starting up the frontend through development mode, so I decided to see the original branch and work back into the updates I had made. Jason was able to start the frontend without the backend using dev. This gave me the advantage of designing the frontend and seeing what would work. Working with someone this sprint improved the sprint overall for me because last sprint, everyone else was in the backend while I was working in the frontend. My teammates were helpful, but without working with someone directly in the frontend, it was difficult to get help on exactly what I needed.  

First starting on the design, I had noticed that I had to make the banners and everything the perfect size, or it wouldn’t be eye-appealing. Small things like having the top and bottom borders being same size were important. One of my biggest problems was attempting to make sure the page could fit on one page without having to scroll, because, first, designing the front end, there would be empty white space that wasn’t needed, or having the logos be too small. But I was able to persevere and have a design that I was proud of. I also have to give credit to Byron, who posted his design, which I translated into my design. It helped in choosing what logos should be prioritized and gives the frontend a coherent design.

  For this sprint, I would choose Kindred Spirits as the pattern that most resonated with me. This pattern highlights the importance of working together and working with someone who is like-minded and is determined to learn and accomplish their goals. This is great to have in a team because it allows teammate to grow together while also accomplishing their tasks. Working with a teammate this sprint greatly affected the amount of work I was able to accomplish. I was able to complete more in a shorter amount of time given. Directly working with Jason during this sprint gave me more insight into the issues we faced and helped me grow faster and feel more supported. Before this sprint, as I mentioned, I was isolated, working on the frontend by myself. It was difficult to troubleshoot my work with others because they were working on different aspects of the project, mostly in the backend. My teammates were helpful in what they could help me with, but there was always a disconnect because I didn’t want to slow them down on their work, and they were working on the backend. Working in collaboration with Jason allowed me to exchange ideas and confirm each other’s work. It gave me more confidence to ask questions because we were working in unison on the same problem. If I had been aware of this pattern earlier, I would have gotten a partner sooner because working in isolation isn’t a deterrent to just you but to the whole team.

From the blog cs-wsu – DCO by dcastillo360 and used with permission of the author. All other rights reserved by the author.

Sprint 3 Retrospective

During the third and final Sprint of this semester, me and my partner Hiercine basically did exactly what we did during the last Sprint. We continued to work on modifying the endpoints within the guestinfosystem backend in order to accept access tokens that will let the system know if the request comes from someone who is authorized to make that request. Since we worked on the same task and just made some more progress, I’ll explain the code that we came up with.

The main issue that Hiercine and I had during this Sprint was having to depend on another team. On the last day of class, we checked in with the professor and the other team still hadn’t finished their code so we weren’t able to proceed. We had to leave our code as a merge request draft for someone else to work on in a future semester, leaving a blank spot for the other team’s code to get inserted.

While we did have a major issue that prevented us from being able to fully complete our work, I think Hiercine and I did a great job finishing what we could. We made sure to communicate the situation with each other, the rest of our team, and the professor. We also made sure to research more into keycloak to figure out how to use it since that’s what the other group was using. As a team, I think we did a great job and don’t think that there is much we could have improved upon.

A pattern from the Apprenticeship Patterns book that is relevant to my experience during this Spring is the “Use the Source” pattern. This pattern focuses on the importance of digging into the actual source code when you’re trying to understand how something works instead of relying on secondhand documentation, assumptions, or waiting for explanations. I selected this pattern because of how Hiercine and I looked at the group’s code and did our own research on keycloak instead of asking the other team to explain it to us, since that didn’t go well last time. The “Use the Source” pattern encourages this behavior, allowing you to understand it yourself.

Here is the checkAuthorization endpoint we created (with line numbers):

  1. /*const axios = require(‘axios’);
  2. async function checkAuthorization(request, requiredRole) {
  3. try {
  4. //Assuming the user’s role is stored in a token (e•g-, JWT in headers)
  5. const userToken = request. headers.authorization;
  6. if (!userToken) {
  7. return false; // No token, unauthorized
  8. }
  9. // Make a request to the authentication service to verify the role
  10. const authResponse = await axios.get (“https://your-aut api.com/verifyRole”, {
  11. headers: { Authorization: userToken }
  12. });
  13. const userRole = authResponse.data.role; // Assuming the API returns { role: “pantrystaff” )
  14. return userRole == “PantryStaff” || userRole == “PantryAdmin”|| userRole == “SpecificUser”; //SpecificUser == UUID
  15. }
  16. catch (error) {
  17. console.error (“Authorization check failed:”, error);
  18. return false;}
  19. }
  20. module. exports = checkAuthorization;*/

Here is an explanation of what each section of the code does:

Line 1: Imports the Axios Library for HTTP requests.
Lines 3-6: Starts a try block to handle errors while extracting the Authorization token from the request headers.
Lines 8-10: Check to see if the token is missing, returns false to deny access if there isn’t one.
Lines 13-16: Sends a GET request to the external authorization service using the token in the header to validate the user. This is what the other group would provide.
Lines 18-20: Extracts the user’s role from the response and checks if it matches one of the roles.
Lines 22-26: Logs any errors and returns false, as well as an export statement to make the function reusable in other files.

Here is a link to the merge request draft: https://gitlab.com/LibreFoodPantry/client-solutions/theas-pantry/guestinfosystem/guestinfobackend/-/merge_requests/118

From the blog CS@Worcester – One pixel at a time by gizmo10203 and used with permission of the author. All other rights reserved by the author.

Sprint #3: Retrospective

Gitlab Deliverables:

With Sprint #3 being the last chance to make substantial progress towards the project, there was an inherent pressure to go above and beyond. Our team’s first step towards reaching this goal was finally, after these three sprints, achieving success in testing the GuestInfoSystem online. Before this sprint, we struggled to find what caused conflicts between the backend and frontend. A joint effort with our team adding a missing network in the Docker-Compose file, and the GuestInfoSystem team removing a problematic variable, we were finally able to have the GuestInfoSystem respond. Now our team can add new users and track their information within the volume. Without the cross-team collaboration, we may not have been able to correct this issue. On the wave of success we had with implementing GuestInfoSystem, our team began to look to integrate other services within Thea’s Pantry. As much as I wanted to continue pushing forward, I was a bit too weary of the end of the sprint coming ever closer. I grew more concerned that our team would continue to see new tasks that we could not complete this semester. Reflecting back, I wish I weren’t as concerned with leaving ‘loose ends’ for the incoming team, as perhaps I could’ve been more effective in helping my team with their new developments. To mitigate this concern, we created two new files. One was the onboarding documentation, which was written by me, and the other was an experimental Docker-Compose file, which was to be explicitly stored separately from the latest working version. This was an effective way of addressing ‘loose ends’, as the onboarding documentation covers content that can be found in the ‘stable’ docker-compose file, while new developments can be found and tested using the experimental docker-compose file. Throughout this entire sprint, our team was working to our best abilities, therefore I don’t have any critiques or feedback at this point. It was very interesting to see our methods and approaches to problems change throughout each sprint. For example, we always kept a very open discussion about our progress with the GuestInfo team. Over the three sprints, this discussion eventually evolved into directly collaborating in their development to see the changes we wanted in server deployment. Our team was dedicated to evolving our work, and if we were given another sprint, I’m sure there would be even more room for improvement.

A design pattern this sprint spoke to one of my internal conflicts: ‘breakable toys.’ Once we had the GuestInfoSystem running, it did not feel real. My first reaction was to be very gentle with the service or any future development, as it could jeopardize our working version. We spent so much time reaching this point that I shut down any threat of instability. This carried on for a day, until the next class, where I allowed myself to let go of the stability. In reality, no more progress could be made if I kept being cautious about making any changes. Here, the idea of breakable toys would help enrich my understanding. Now that we had a working model, it was up to our group to try new things, see what breaks, and learn from it. Our workspace has now become our sandbox. We could try to implement new functionality, such as adding new services from Thea’s Pantry, and see how the server responds. One important takeaway from this sandbox was learning that my endpoints, specified by the reverse proxy, didn’t work and needed to be researched further. By breaking the service we spent so long trying to build, our team was able to find new goals to set our minds to. Most importantly, treating the server as a breakable toy has taught me to let things change. Changes we push forward may break the functionality of the service, but that doesn’t mean it will always be broken from that point onwards. I now allow changes to occur, expected behaviors to break, and to learn from those lessons during that downtime.

-AG

From the blog CS@Worcester – Computer Science Progression by ageorge4756 and used with permission of the author. All other rights reserved by the author.

Sprint 3 Retrospective: Closing the Chapter

I never imagined we’d make it to the end of this project. At the start of the semester, I was nervous about working with new people and uncertain about the project I was assigned. Throughout this journey, I’ve learned a great deal about the importance of team building, communication, and the process of learning new things. Now, looking back, I’m proud of everything we’ve accomplished together.

During Sprint 3, what worked well for my team and me was that we had already achieved most of our core goals in Sprint 2. This allowed us to shift focus toward refining the application by cleaning up code, improving the UI, and enhancing some backend features. My front-end partner and I revisited unresolved issues from earlier sprints, including:

  • Issue 13: Get the website running, not just a local server – We attempted deployment but weren’t able to get the site running beyond local environments.
  • Issue 14: Fix rear-facing camera – We worked on improving the camera view, but the issue remains unresolved.
  • Issue 22: Add a table for the database page – We successfully added a new page that displays scanned items in a structured table format. We also added buttons to navigate easily into the scanner page and index page.

What Didn’t Work

Despite our efforts, we were unable to deploy the web app to a live server or fully resolve the rear-facing camera bug. These remaining issues were thoroughly documented in GitLab so future teams can continue from where we left off. Our team could have also benefited from clearer and more consistent communication. There were moments when some members weren’t fully aware of our status or progress, which led to minor delays and misalignments. This is understandable, as everyone was juggling multiple responsibilities and deadlines toward the end of the semester.

Team & Individual Reflections

As a team, we met our main objectives, but better communication and consistent updates would have improved our overall workflow. Individually, I could’ve contributed more by keeping the GitLab issue board better organized. This would’ve helped not only our team but also future contributors understand what was done and what still needed attention.

Apprenticeship Pattern: Record What You Learn

The pattern I chose for this sprint is Record What You Learn. This pattern emphasizes the importance of documenting lessons, progress, and experiences throughout a project whether in a journal, blog, or project management tool. I chose this pattern because there were moments when I couldn’t remember if we had already tried certain approaches or fixes. Having a clear record in GitLab helped us revisit past attempts and stay organized.

This pattern also reminded me how important it is to consistently use and update our issue board not just for tracking tasks, but also as a learning tool. If I had read and followed this pattern from the beginning, I would have been more intentional about journaling progress and decisions after each sprint. Moving forward, I plan to apply this pattern to future projects by maintaining both personal notes and team-wide documentation.

From the blog CS@Worcester – CodedBear by donna abayon and used with permission of the author. All other rights reserved by the author.

Sprint 3 Retrospective

For this last sprint, I myself focused on the Reporting Data Transfer project within the Reporting System part of the system. Following from last Sprint, I continued to work on the process that would take guest information data and take it from RabbitMQ and insert it into the mongo database (https://gitlab.com/LibreFoodPantry/client-solutions/theas-pantry/reportingsystem/reportingbackend/-/issues/96).

However, for this Sprint after discussion the project architecture and planning out a better way that would be able to work around the limitations that presented when trying to code the same functionality in the backend, I started a new and separate project that would only run this data transfer. I first set up the project with all the files that the other projects had and the new files that it would need, including the RabbitMQ files that were simply copied over to the new project. From there, the structure also changed in placing files in the testing directory to better set up for the testing of the system. From there, I went about making sure that everything was working and in the place it needed to go, installing dependencies, and restructuring the docker files to have everything launch correctly. This is where I had a few issues.
The interaction of many different and new systems led to, again, a lot of roadblocks that stopped progress. I wanted to avoid this from the last Sprint but again my unfamiliarity with how to debug without that debugging being isolated to one place and instead spanning multiple systems without clear error messages. Even so, every problem I ran into I feel at least let me learn more about the system and just get more experience with working on multiple systems.

With how topics were assigned, we didn’t work too much as a full team other than coordinating progress and progress meetings, but instead were kind of paired off into two people working on the front end and two on the backend. I worked well with Griffin, as we were both working on creating the testing framework for our separate functions and we were able to answer each other’s questions. By delegating issues to each person, we ended up doing this a fair amount. While I think that this method did allow us to develop across the whole project, as there was not much starting code there, and have improved functionality for multiple different tasks, it diminished the amount of group work we could do. After working on this project for a semester now and looking back, I can see that in some places I definitely could have benefitted from having someone work directly with me to discuss with and work through problems together and lean on each other’s knowledge, but at the same time it is a trade off as our efforts would be focused on less tasks overall but farther for a single task we chose to work on.

As for the apprenticeship pattern that most applied to this sprint, I would say the third pattern, the long road. While the book uses the context of getting a prestigious or well-paying job, I think it relates to working on this project in class as well. Reflecting on the class and the project itself, I feel like I had tunnel vision trying to just get the issues done as much as possible and without prompting from the class material, feeling like the end state of the project was the main determining factor of the final grade. Looking back now at the syllabus and grading scheme, I realized that the focus of the class was more around working in the environment of a group coding project where you yourself don’t see the whole project all the way through, but are able to come in, understand the code, and be able to improve it when you are done, instead of having a fixed goal such as, “the project needs to work and be fully functional at the end of sprint three.” That still would have been nice, but I think that with how many different types of coding and computer science jobs there are, my experience working in this way will be more important when in a job than any specific solution that I came across.

From the blog CS@Worcester – Computer Science Blog by dzona1 and used with permission of the author. All other rights reserved by the author.

Sprint 3 Retrospective

During Sprint Three, my main focus was on restructuring the frontend. While two teammates continued working on the data transfer subproject and reporting logic, I worked with another teammate on getting the frontend functional. Since we shifted our focus away from the database issue in sprint two, we have made more progress on our issues and had more achievable goals.

Before restructuring, I spent some time debugging the frontend/backend connection, which we thought was a blocker for my teammate. I tested switching the backend Docker image from the main branch to our latest reportingAPI branch, but ran into further issues. I felt we should resolve the pipeline issues and update the frontend structure before troubleshooting the connection issue, especially since it was not a blocker for UI development. I created a new branch from an earlier commit and fixed a CSpell error in the pipeline before focusing on the frontend.

The main blocker at the start was that the frontend was outdated. It used an older file structure and lacked Vite, which did not align with the other projects, like guestinfofrontend. My teammate had trouble developing the frontend UI because it was outdated and could not preview the changes. To help him with the UI, I began restructuring the frontend and set up the development and preview environments. Before restructuring, I confirmed that Vue 3 and Vite would work so my teammate could preview his changes to the UI live. Once that was done, I started working on frontend-dev-up and frontend-prod-up scripts, ensuring they worked properly. When setting up Vite, I had used the newest version, which caused some compatibility issues. I downgraded Vite so it would work with node:14 Alpine used in the other projects.

Despite the frontend/backend connection not being fixed yet, we were able to update the frontend’s file structure, set up Vite, and develop the new UI.

Our decision to move the data transfer to a new subproject allowed us to have more achievable goals for sprint three. My teammate and I communicated consistently and collaborated effectively on the front end. Using the guestinfofrontend structure as a reference made the process much smoother.

I believe too much time was spent on the frontend/backend connection issue during sprint two and at the start of sprint three. It was not a blocker for the issues we were working on, and we could have started earlier on the frontend restructure. Also, I understood less of the progress made outside the frontend changes with my teammate, so there could have been better communication between us on the other issues.

I should have been more careful when implementing Vite and Vue 3 for my teammate. In a rush to get the development and preview running, I neglected to check on the versions used in guestinfo to see if they match. Although it was not a big issue to switch to an older version, it added more time that could have been used elsewhere.

I chose the “Use the source” pattern, which discusses the importance of reading and understanding existing code to gain knowledge and improve skills. During Sprint Three, I had to examine and understand the guestinfofrontend so I could update the file structure in the reporting frontend. I was able to use the existing code as a guide for setting up Vite and restructuring the project, deepening my understanding of the frontend as a whole.

Gitlab Commits:

https://gitlab.com/LibreFoodPantry/client-solutions/theas-pantry/reportingsystem/reportingbackend/-/commit/cea637b431bcc2ab4eab7dc1d91fac5b53233477

  • Reverted to an earlier commit on a new branch and fixed the CSpell error before focusing on the frontend.

https://gitlab.com/LibreFoodPantry/client-solutions/theas-pantry/reportingsystem/generatewcfbreportfrontend/-/commit/db74190e17b0f4078c3f7030126cfde805814824

  • Set up Vite for UI development and preview.

https://gitlab.com/LibreFoodPantry/client-solutions/theas-pantry/reportingsystem/generatewcfbreportfrontend/-/commit/b42c2d567e67e11ceb3c7d431ed22116baf70613

  • Reorganized file structure to match guestinfofrontend and fixed compatibility issues.

https://gitlab.com/LibreFoodPantry/client-solutions/theas-pantry/reportingsystem/generatewcfbreportfrontend/-/commit/fe54704c381fabb3b1012361663eb9b4f8bbc7d9

  • Small pathing fix.

From the blog CS@Worcester – KindlCoding by jkindl and used with permission of the author. All other rights reserved by the author.

Reflections on Testing Endpoints and Growing Through Practice

Merge Request #70: Added unit and integration tests for CheckInventory and UpdateInventory using Mocha, Chai, and Chai-HTTP.

Sprint-3 marked the final stage of our project, and my main task was implementing unit and integration tests for the CheckInventory and UpdateInventory endpoints. I had previously written the code for both endpoints, so I was already familiar with how they were supposed to work. That understanding made writing the tests conceptually easy, as I didn’t need to spend time figuring out what the endpoints should do. I knew the expected behaviors and edge cases, which helped guide the testing process and made the test coverage meaningful.

Where I ran into difficulty was not with the logic itself, but with the testing tools specifically, using Mocha, Chai, and Chai-HTTP together. Setting up a testing environment using these tools was trickier than expected. I struggled with managing asynchronous behavior, handling server start/stop during tests, and writing assertions that worked reliably. These challenges weren’t about writing poor logic they were about not being familiar enough with the tools to use them efficiently. That lack of familiarity cost me a lot of time and caused some frustration as I repeatedly debugged problems that had more to do with tool configuration than with the quality of my code.

Looking back, I think one clear improvement for future teams would be to include a basic test template and some documentation in the repository for setting up and using the test tools. Even a single working example using Chai-HTTP would have gone a long way in making the setup easier. That kind of shared resource would reduce the learning curve for everyone and ensure more consistent testing practices across the team.

On a personal level, this sprint reinforced how important it is to practice with tools before relying on them in a real development environment. Even though I knew exactly what needed to be tested, I wasn’t confident with Mocha or Chai. If I had taken the time earlier in the project to experiment with those tools in a small, isolated sandbox, I would have been much more effective during this sprint. That early practice would have prevented many of the delays I encountered and made the testing process smoother and more productive.

The apprenticeship pattern that best fits my experience during this sprint is Practice, Practice, Practice. This pattern emphasizes the importance of repeated, focused practice in low-risk environments. It’s not just about learning something once it’s about practicing it enough that it becomes second nature. That’s exactly what I missed with Mocha and Chai. I hadn’t used them enough beforehand, and it showed. If I had internalized this pattern earlier, I would have taken time before the sprint to build a few quick test cases from scratch, just to become more comfortable with the tools. That effort would have paid off by giving me the fluency to move faster and avoid common mistakes.

Sprint-3 was a good close to the project. It reinforced that understanding the code is only half the challenge being effective also means knowing your tools. With deliberate practice, I could have made this sprint more efficient and less frustrating. That’s a lesson I’ll carry into future projects.

From the blog CS@Worcester – CS Today by Guilherme Salazar Almeida Nazareth and used with permission of the author. All other rights reserved by the author.

Sprint 3 Retrospective Blog Post

Sprint 3 has been an insightful experience filled with both achievements and challenges. This sprint primarily involved working on backend functionality for Thea’s Pantry IAM system within the LibreFoodPantry initiative. One of my key contributions was addressing Issue #3, which required analyzing authentication workflows, improving data handling, and refining API integrations. Throughout this sprint, I learned valuable lessons about balancing functionality with efficiency, while also adapting my approach to problem-solving.

One of the aspects that worked particularly well was team collaboration. Engaging in technical discussions with peers helped clarify complex issues and streamlined our workflow. GitLab was an essential tool in maintaining transparency about project tasks, allowing everyone to track contributions and progress effectively. Another highlight of this sprint was the feedback loop—code reviews and discussions allowed for refinement in implementation, ultimately leading to higher-quality results. These collaborative efforts reinforced the importance of communication and collective learning in a development environment.

However, there were also several challenges that surfaced throughout the sprint. Unexpected dependency issues caused delays in backend development, requiring troubleshooting and adjustments. Additionally, occasional miscommunications led to minor confusion regarding task ownership. While these issues did not significantly disrupt progress, they highlighted the need for clearer delegation and proactive communication. Another obstacle was testing coverage. We faced last-minute debugging challenges, which could have been avoided with stronger automated testing earlier in the sprint. These setbacks underscored the importance of planning ahead and maintaining consistent testing practices.

Moving forward, there are key improvements that both the team and I can implement to enhance future sprints. On the team level, establishing clearer communication protocols would prevent misunderstandings in task delegation. Additionally, conducting early dependency assessments could help identify potential roadblocks before they impact development. Strengthening our testing strategy will also be crucial to reducing last-minute debugging and ensuring stable releases. On an individual level, I plan to work on better time management, which would help me balance workload efficiently and reduce stress toward the sprint’s end. Furthermore, improving my understanding of authentication systems would allow me to contribute more effectively to similar backend tasks in future sprints. Finally, I aim to be more proactive in seeking clarification when encountering uncertainty rather than hesitating and losing valuable development time.

The apprenticeship pattern that resonated most with my experience during this sprint was “Craft Over Art” from Apprenticeship Patterns. This pattern highlights the importance of focusing on practical craftsmanship over aesthetic perfection when developing software. It suggests that while writing clean, elegant code is valuable, the priority should always be delivering functional and maintainable solutions. I selected this pattern because, during Sprint 3, I found myself spending extra time refining and perfecting small details in the authentication backend instead of prioritizing full functionality first. While striving for quality is important, I realized that over-focusing on perfection can sometimes detract from the broader project goals.

Had I embraced this pattern earlier, I would have directed my attention toward building a reliable and functional authentication system first rather than obsessing over fine-tuning minor details. This approach would have allowed for more efficient contributions to Issue #3, as I would have spent less time on unnecessary refinements and more time ensuring the overall integrity of the backend system. Looking ahead, I aim to apply this mindset by focusing on practical, maintainable solutions while reserving optimization and refinements for when they genuinely add value.

Overall, Sprint 3 has provided meaningful learning experiences that will shape my approach in future development work. The blend of successes and setbacks underscored the importance of adaptability, teamwork, and continuous improvement. Moving forward, I plan to apply these insights to future sprints, strengthening both my technical skills and collaborative contributions.

From the blog CS@Worcester – aRomeoDev by aromeo4f978d012d4 and used with permission of the author. All other rights reserved by the author.