Author Archives: Delice Ndaie

Sprint 3- Retrospective

This last sprint did not go as smooth as the previous, we encountered a bunch of roadblocks with the backend that sort of disturbed the plans and dynamic established previously. We were able to get to a decent and somewhat better end product then what we started off with but we didn’t quite reach some of our main goals.

What didn’t work well

As a team:

The biggest issue was the backend not running. We started the spring with all the endpoints written down but we had an issue with connecting it to the database and getting it to work. About half the issues of the sprint were solely related to the backend and now that we could run or test anything, a lot of us were left with not much to do, or not knowing what to do. Consequently it led to a lot of not really productive time.

Individually:

Going into the sprint, my task was supposed to be testing and fixing the two endpoints that I wrote and that didn’t end up happening because of the backend not running. Since there was already two other members actively working on the backend, I found myself not working on anything for like half the sprint. At point, I would join in with the backend work but it turned out to be us three doing the same test so I decided to look inside the folder to see if there was something else I could do.

I also think that this sprint being toward the end of the semester, I ended up focusing my energy on another project since I couldn’t find anything to do.

What worked well

As a team:

We were able to fully refactor the front-ends for the most part, we updated all repositories with all the necessary add-ons (commitlint, RabbitMQ tutorials,…). The backend was created and is running. It’s not working yet and consequently the endpoints are not tested yet. In general, we accomplished over 80% of what the goal was for the semester so it was indeed a success.

Individually:

The one good outcome was that I learned a little bit about automation testing. There was a Testing folder inside the microservices example with classes like axios.js, chai.js api.js and so on. It was a bit confusing but I discovered a bunch of links (blogs and videos) that helped a bit. I pushed a document with all the links in the documentation folder for the other teams to refer to it.

Changes to be Made

Most changes that need to be made are for the next team. They can work on the following:

  • get the backend to run, it is very close to being ready as it is working already;
  • Take a brief moment to modify the user interfaces for check inventory and add inventory to prevent user error;
  • Test and fix all endpoints;
  • Develop the front-end calls based off what was set up in the backend and connect it to the web pages for testing the frontend containers with the backend

Links:

Add document with Information on testing folder(backend) (#39) · Issues · LibreFoodPantry / Client Solutions / Theas Pantry / InventorySystem / InventoryBackend · GitLab

From the blog CS@Worcester – Delice's blog by Delice Ndaie and used with permission of the author. All other rights reserved by the author.

Blog 8: Practice, Practice, Practice

The context given here is that You want to get better at the things you do and you want to develop concrete skills in new areas. The problem is now that the performance of your daily programming activities does not give you room to learn by making mistakes. It’s as if you’re always on stage. The solution offered is to take the time to practice your craft without interruptions, in an environment where you can feel comfortable making mistakes.

Practice is important because it will get you to where you need to be. We talked about reading and going back to the classics as a way of getting you to master your craft but reading without practicing the acquired knowledge won’t really help. That’s why we believe efficient and deliberate practice methods not only help you learn faster but also help keep you motivated. Over time, this chain of exercises would hone your strengths and correct your weaknesses.

The book emphasizes that short feedback loops need to be incorporated into your practice sessions. While practice is good in theory, if you’re not getting periodic feedback, you’re probably developing bad habits. Over time, the need for constant feedback lessens as you grow as a craftsman, and is gradually replaced by your duty to take on the role of a senior apprentice, modeling good habits by practicing with less experienced developers.

I was very surprised by the following sentence: “Your grandmother may have told you that practice makes perfect. She was wrong. In fact, practice makes permanent. So be careful what you practice, and constantly evaluate it to ensure you haven’t gone stale. Choosing the right thing to practice every day is a skill almost as important as the act of repeated practice.”

The lines above shows that we could easily get comfortable and stop making concrete progress. Practicing is good but it has to be diverse to allow the growth to happen. The point is not to hone your memory, but to discover the nuances in even the simplest skilled activity. An easy to implement it could be as simple as finding an exercise in one of your old books and tweak it a little bit to make sure that it’s just a little harder than one you know you can easily solve.

From the blog CS@Worcester – Delice's blog by Delice Ndaie and used with permission of the author. All other rights reserved by the author.

Blog 7: Read Constantly

The context of this pattern is that you are being enthusiastic about your passion to the points where it has open doors for you. The problem is such that there seems to be an endless stream of deeper and more fundamental concepts that are eluding you, despite the proficiency that you already have. The solution offered is to focus the thirst for learning on consuming as much of the written word as possible. Emphasize books over blogs as you construct your reading list.

The book emphasizes that reading the occasional research paper will stretch your mind and keep you in touch with the cutting edge of computer science, and also offers a source of challenging new ideas. Trying to implement these ideas will expand your toolbox with new algorithms, data structures, and design patterns many years before they reach the mainstream. An Important fact to remember is that Successful apprentices tend to focus on “long-lived books” and use the Web or experimentation to learn how the information has evolved and that’s why we should focus on going back to the classics. That being said, one danger of focusing on the classics is taking it too far and abandoning the more pragmatic knowledge and information that enables you to improve your day-to-day craftsmanship. Be sure to intermingle classics with modern, pragmatic books and/or articles in your reading list.

I really resonated with this because reading books hasn’t always been fun for me. Thankfully, the eBook and audio version of things have made it easier. I also like that they ended the pattern by the following: First, the trick is to keep up the momentum. After you’ve finished this book, decide now what your next book will be and make sure to buy or borrow it so that when you finish this book, you can switch immediately to the next one. Second, you should also try to keep a slim book with you at all times. This will let you use the little bits of dead time throughout each day (such as train journeys or waiting in queues) to learn. Third, Find the oldest book in your developer’s book collection and read that one first.

From the blog CS@Worcester – Delice's blog by Delice Ndaie and used with permission of the author. All other rights reserved by the author.

Blog 6: Share what you learn

The context given here is that You have been an apprentice for a little while. You know a few things and people are starting to look to you as a source of knowledge. Up until now, you have focused exclusively on your own improvement as a craftsman. To become a journeyman, you will need the ability to communicate effectively and bring other people up to speed quickly. A good way to prepare you for that is to develop the habit of regularly sharing the lessons you have learned. This may take the form of maintaining a blog or running “brown bag” sessions amongst your peers. You can also make presentations at conferences or write tutorials for the various technologies and techniques that you are learning.

The books highlight that Being part of a community of individuals where both learning on your own and humbly sharing that newly acquired knowledge are valued is one of the most powerful aspects of apprenticeship. It makes otherwise-esoteric fields of knowledge suddenly accessible, and provides apprentices with guides who speak their language. That being said some lessons should not be shared, and it’s important to keep in mind that there is an ethical dimension to knowledge. Before sharing something, consider whether that lesson is yours to share. It may be a secret, or it may harm others. Things that seem obvious to you because of your current context may in fact be your employer’s “secret sauce” and it is all too easy as an apprentice to overlook the consequences (legal, financial, and political) of sharing that knowledge.

I can personally relate to the content in this pattern because I have worked for 2 years as a tutor for introduction to programming class (java) and it has helped me on so many levels. I remember my first instinct was to decline the job when the position was first offered to me. But then I took “a risk” and started working as mentor and all of a sudden, my understanding in the class material got better. I got comfortable sharing knowledge in an effective way, and I got great public speaking skills

From the blog CS@Worcester – Delice's blog by Delice Ndaie and used with permission of the author. All other rights reserved by the author.

Blog 5: Use Your Title

The context given here is that as a result of your dedication to learning, you have been hired or promoted (formally or informally) into a position with a title containing words such as “senior,” “architect,” or “lead”. The problem is then that your job title doesn’t match what you see in the mirror. When you introduce yourself in a professional setting, you feel as if you have to apologize or explain away the difference between your skill level and your job description. The solution suggested is not to allow your title to affect you. It is a distraction that should be kept on the outskirts of your consciousness. Use your title to gauge your organization, not yourself.

Impressive titles and responsibilities do not indicate that your apprenticeship is over. They only serve to remind you that there is a shortage of craftsmen in our industry so we should not be fooled by an impressive title. Another variant of this theme is informal versus formal titles. For instance, you may have grown into a position of authority on your team, despite your formal title remaining the same. These informal titles can be hard to ignore, because they are constantly reinforced by your peers, even if they conflict with your self-assessment. During these times, your connections with your mentors and peers will be critical to keep you grounded in reality.

I was really glad to see that the title subject was tackled in this book. So many times, I have found myself in jobs doing way more than what my title said sometimes even doing something completely different. In my current position, I am doing my job and some part of the data analyst job and at first, I got slightly annoyed but I have now realized that I would try to learn from it as much as possible rather than complain about it

I also really liked their action plan which is to Write down a long and descriptive version of your job title. Make sure it accurately reflects what you really do at work and your skill level. Keep this updated, and from time to time imagine how you would view a stranger who had this job description.

From the blog CS@Worcester – Delice's blog by Delice Ndaie and used with permission of the author. All other rights reserved by the author.

Blog 4: Dig Deeper

This pattern encourages us to go beyond the surface level work. The context given is that You live in a world of tight deadlines and complex software projects that use a multitude of tools. Your employers cannot afford the luxury of employing enough specialists to fill every role. You learn only enough about any tool to get today’s job done. You select a handful of tutorials on the language or library that you’re working with today and consequently You make decisions without taking the time to understand the issues, and copy the toy examples provided with the tools. The problem is then that You keep running into difficulty maintaining the code you’ve written because it turns out that the tutorials you followed cut corners and simplified complex issues. You find that your superficial knowledge of a thousand tools means you’re always floundering whenever a subtle bug arises or you have to do something that demands deep knowledge.

The solution suggested is now to Learn to dig deep into tools, technologies, and techniques. Acquire the depths of knowledge to the point that you know why things are the way they are. Depth means understanding the forces that led to a design rather than just the details of a design. In other words, it also means understanding type theory rather than simply parroting the things you’ve heard others say. I agree with what is being said because the areas where you have deep knowledge feed your confidence and they indicate places where you can deliver value early in your time with a new team. More importantly, this depth of knowledge is something you can fall back on to give you the strength to tackle new areas.  I have mentioned before how I usually run straight to google or StackOverflow in time of doubts but 95% if the time the website only provides “quick fix” type of answers and there is no real learning happening. I have understood that applying this pattern regularly, will help me truly understand how my tools work and I will no longer just be gluing bits of code together and depending on other people’s magic to do the heavy lifting.

From the blog CS@Worcester – Delice's blog by Delice Ndaie and used with permission of the author. All other rights reserved by the author.

Blog 3: Find Mentors

This pattern is as clear as its tittle. Here’s the context given: you have realized that you’re not the first person to walk the path and that you are spending a lot of time exploring blind alleys. The problem is that you’re walking along a path with no idea of what’s around the next corner or how to prepare for it. You need help and guidance. The pattern doesn’t fail to recognize that our field is very young and therefore has few recognized masters. The solution is then to seek out those who have gone ahead of you and strive to learn from them.

I agree with the pattern because finding a mentor or someone that can supervise the work of an apprentice saves so much time and helps with building confidence. The pattern mentions how hard it is to find mentors sometimes and I can relate to that as I have found myself trying to find a mentor but it has always been hard. That being said, joining online forums, discord servers and being on “Tech” twitter has helped me make meaningful connections. I have come to understand that it is extremely important to find a community and put myself out there.

Another interesting fact they mentioned is that when trying to find mentors, an apprentice must remember that we’re all walking The Long Road and no one knows everything. It can be tempting to feel that your mentor must be a master because they know so much more than you do. That temptation must be resisted, because you do not want to become so disillusioned with your mentor’s inevitable weaknesses or blind spots that you feel you can no longer learn from someone who still has much to offer.

Something to remember is that your apprenticeship is unlikely to happen in isolation, and just as there will be people ahead of you, there will also be apprentices who have not yet reached your skill level. The other side of your search for mentors is that you must be willing to provide mentoring to those who seek it from you. Passing along what you have learned from your mentors is one of the ways in which you can begin the transition to journeyman status.

From the blog CS@Worcester – Delice's blog by Delice Ndaie and used with permission of the author. All other rights reserved by the author.

Blog 1: Expose Your Ignorance

This pattern is about shedding light to dark or unknow spaces of a craftsman knowledge. The context and problem given are that the people who are paying you to be a software developer are depending on you to know what you’re doing, and your managers and team members need confidence that you can deliver, but you are unfamiliar with some of the required technologies. The solution suggested is to show the people who are depending on you that the learning process is part of delivering software and to let them see you grow. The book also mentions how hard it is to practice it because it is scientifically proven that the need to appear competent is ingrained in most people. That being said, there is no need to hide an area of ignorance because one of the most important traits that a craftsman can possess is the ability to learn, identifying an area of ignorance and working to reduce it.

I can absolutely relate to the context given in this pattern because it’s quite frankly where I am currently at. As I am navigating working my first “real” jobs, I quickly realized that I do have many zones of ignorance and it is extremely difficult to just lay them out because there is a lot of pressure to deliver what I have been hired for. Reading this has definitely reassured me in knowing that most people feel the same. The pattern suggests asking questions as a way to expose one’s ignorance and I have really found that to be true. Often, I would just go straight to google, stackOverflow or any similar website when I was presented with unfamiliar material or when I didn’t know how to approach a task and I would ask question after I ran out of ways. I have then realized that it should be the other way around because hearing from the employer/client and asking the right questions first made my tasks easier to achieve. I found interesting the emphasis they added on expertise not being the destination but being a by-product of the long road we’re all on. It just means that with time and some practice you get the extra knowledge that make one an expert at something.

From the blog CS@Worcester – Delice's blog by Delice Ndaie and used with permission of the author. All other rights reserved by the author.

Sprint 2- Retrospective

This sprint went slightly better than the first one. Though we didn’t get to full completion of what we had planned for the sprint, we definitely tackled it understanding what needed to be done and how to do it.

What worked well:

As a team

The most noticeable thing was how comfortable everybody felt tackling the different tasks. During the first sprint everybody was sort of new to this whole process and it was hard to find the right balance on how to work as a group.

Another success was that we had “better” issues than previously. Now that we knew what actually needed to be done it was easier to pinpoint and address them. We originally thought we would just have to modify the backend but then we quickly realized that the backend endpoints actually needed to be re-made from scratch because the work left by the previous team was not really functional. Thus that was the main focus of the sprint

Individually

I worked on finalizing the complete move of the Api to its own repository and creating the addInventory and getApiVersion endpoints. At first, I was very hesitant to work on any of the endpoints because it just seemed like a lot of complicated work. It turned to be way easier than I thought. I ended up mirroring from the microservices example for the most part. 

What didn’t work well:     

As a team

The one thing that did not work too well was breaking down some of our issues. We definitely knew what needed to be done and created issues for it but for some of it was not broken down enough for more people to work on.  That resulted in some team members without issues to work on and some other members with too much to do.

Another point is that we were not able to make the backend work because we had issues connecting to the database. It could be because one member was in charge of it the whole time while others could have jumped in when they did not have anymore issues to work on.

Individually

Everything went pretty smoothly on my end. The endpoints were not hard to create or update. The one thing I would change is that I wish I looked at the front-end a little bit in preparation for sprint 3. 

Changes to be made

As a team:

As a team, we need to do a better job creating issues. We also need to better communication, discussion, and recording of decisions taking place under the GitLab issues and epics. We are looking forward to this sprint because we will most likely all work on the frontends for a while so there will hopefully be a lot more to communicate on GitLab

Personally:

Do more research on the material to bring my focus more on the learning than just getting things done. I will make an effort to look over the issues that are not assigned to me.

Links:

Add an endpoint that returns the API version (#26) · Issues · LibreFoodPantry / Client Solutions / Theas Pantry / InventorySystem / InventoryBackend · GitLab

Create and implement addInventory.js endpoint (#23) · Issues · LibreFoodPantry / Client Solutions / Theas Pantry / InventorySystem / InventoryBackend · GitLab

Rename addItem.yaml and give it a more fitting name (#1) · Issues · LibreFoodPantry / Client Solutions / Theas Pantry / InventorySystem / InventoryAPI · GitLab                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      

From the blog CS@Worcester – Delice's blog by Delice Ndaie and used with permission of the author. All other rights reserved by the author.

Sprint 1 – Retrospective.

What worked well

As a team: 

We did a good job reviewing each other’s work. Merge requests were approved pretty quickly and we did a good job jumping in to help as soon as there was an issue.

Most of us did not remember scrum techniques and rules at first. However, we managed to catch up and follow the “rules”. We kept up with standup meetings and updating the scrum board. I also appreciated how every team member effectively reported on their work regardless of its state (in-progress, done, needs review, not-progressing,…)

Personally:

I think I did a good job being the scrum master. I had to brush up on scrum concepts a little bit but after that it went smoothly. I led all the standup meetings and took important notes for the group whenever we discussed our tasks.

As far as the project went, I worked on moving the api to its own repository. It was pretty straightforward. I created the folders and sub-folders and filled them up. I referred to the API repo we used last semester for the Microservices examples. I then added two JSON packages, some documentation and a development container.

What didn’t work well

As a team:

The biggest struggle we had was figuring out meaningful issues for our epics. We started off with not enough issues but then ended up adjusting the weights to reach the appropriate weights. At the end of the sprint, we realized that we actually underestimated the weights for a couple issues because we did a lot of “figuring out”, researching and that took some time that was not reflect in the board of issues.

Personally:

I feel like I could have done a better job looking at issues other than mines. I was so focused on doing the API that I didn’t have the time to look inside backend and the 3 front ends to sort of have an idea of what the others were doing. Consequently, at certain stand-up meetings, I would hear team members talk about specific blocks in the issues, but would have no idea what they were referring to. Another issue I had was with the GitLab pipeline failing in the API inventory. 

Changes to be made

As a team:

As a team, we need to do a better job creating issues. We also need to add more communication, discussion, and recording of decisions taking place under the GitLab issues and epics. We are looking forward to this sprint because we will most likely all work on the backend for a while so there will hopefully be a lot more to communicate on GitLab

Personally:

I will make an effort to look over the issues that are not assigned to me. I will also be a little more prompt to approve merge requests. I barely approved any last sprint and I want to make sure I review some of my teammates’ work because it will help me be in touch with how the project is going.  

Links to some issues:

https://gitlab.com/LibreFoodPantry/client-solutions/theas-pantry/inventorysystem/backend/-/issues/1

Create structure of API Directory

https://gitlab.com/LibreFoodPantry/client-solutions/theas-pantry/inventorysystem/backend/-/issues/12

Split openapi.yaml into paths folder

https://gitlab.com/LibreFoodPantry/client-solutions/theas-pantry/inventorysystem/backend/-/issues/14

Create schema folder and add content from openapi.yaml

https://gitlab.com/LibreFoodPantry/client-solutions/theas-pantry/inventorysystem/community/-/issues/64

Add hrefs to API directory

From the blog CS@Worcester – Delice's blog by Delice Ndaie and used with permission of the author. All other rights reserved by the author.