CST 499 – Week 8

Saturday, June 13th was the Capstone Festival!

The Capstone Festival gave my peers and I an opportunity to showcase the what we have learned throughout the program, and there were so many amazing projects! This is why I am beyond honored that my project was one of two selected as Project of the Year! My spouse and I celebrated with sushi and boba.

I am so excited that I could conclude my CS degree program with a project that promotes social good AND receive recognition for it from the professors and my peers.

CST 499 – Week 7

With my capstone video and final report completed, there is not much to report this week. I am looking forward to presenting at our Capstone Festival on Saturday, June 13th!

I will report back about how the Capstone Festival went in my final Week 8 post.

CST 499 – Week 6

This week I created a video demo of my capstone project. I think I covered all of my bases and that I won’t have to revise anything before the capstone festival.

I’ve also started working on the third and final part of the project report, which seems to be the most lengthy part, so I am glad we have two weeks allocated to that.

This Saturday, I will be taking the ETS Major Field test. I’m not a big fan of standardized tests, nor am I a fan of the spyware I have to install so that someone can virtually proctor the test.

Other than that, the Capstone Festival is coming up in 10 days and we will be finally finished!

CST 499 – Week 5

This week is focused on wrapping up the project and getting usability testing finished. I was able to complete the course scheduling wizard and counselor portal for looking up student wishlists. I’ve deployed the demo site here: http://kazemicode.org/suhi/

While I am still waiting on some more feedback from Counselor users, I got a lot of valuable feedback from Student users:

  • On mobile devices, the collapsible nav bar was not displaying an icon to expand the menu (Fixed)
Mobile view, with fixed “hamburger” icon for collapsible nav bar.
  • When I deployed to a remote server, links on the Graduation Requirements were broken (Fixed)
  • For anonymous users, private temporary storage for the session doesn’t behave as expected (For now, student testers will log in to an authenticated tester account until I can get this sorted)
  • Students would like the ability to add more than one core subject class (e.g. two science classes), so I am currently exploring different solutions for this — likely to be added after the capstone class.

All in all, I’m proud of what I’ve accomplished as Drupal and PHP are both new to me.

Counselor portal with exposed wishlist search form

CST 499 – Week 4

This week I had planned on finishing the scheduling wizard, but I noticed the catalog search feature was not returning all the intended results. After looking into this issue, I determined that the search was only utilizing the course title to fetch results and not utilizing the index I created using “graduation requirements” taxonomy (e.g., mathematics, science, etc). So, for example, when the user searched for “math”, it would not return math classes like “AP Calculus” because “math” is not part of the title. After exploring Drupal’s Search API documentation, I was able to remedy this issue by explicitly mapping an index to the taxonomy’s description rather than the taxonomy object itself.

I also spent a bit of time diving deeper into theming in Drupal, which is a bit less straight forward than writing CSS. In Drupal, you can use Twig files–template files that have an inheritance hierarchy. I was able to refine the appearance of my main web application with a mixture of custom Twig files and CSS.

I also created custom Twig files and CSS for the custom module that drives the Scheduling Wizard.

I have also resumed work n the logic of the Scheduling Wizard, which I hope to be finished with before the end of the working week so I can begin usability testing this weekend. What has slowed me down in this aspect is that there seem to be so many ways of doing one thing in Drupal and it can be challenging to find well-documented examples (and weeding through ones that may be deprecated).

CST 499 – Week 3

This week I focused on learning more about creating custom modules in Drupal 8 that utilizes imported JavaScript libraries. I will need this to polish off my course scheduling wizard. I also touched base with my client to confirm scheduling for usability testing as well as what to expect in terms of procedure. I’ve given myself an extra week of wiggle room to fine-tune anything before usability testing in late May.

CST 499 – Week 2

Since I am completing the capstone project independently, I did not have a chance to implement the ideas covered in the article about effective meetings. However, I will be meeting with my client in the next couple of weeks (they have been stretched for time since they have transitioned to distance learning during COVID-19).

My plan is to front load the objectives (usability testing) and to provide a document that outlines the tasks ahead of time so that the majority of the meeting with the client can be allocated to the actual usability testing process and debriefing.

CST 499 – Week 1

This week’s reading for the Capstone class is How to Run Effective Business Meetings That Produce Results: Tips to Plan, Lead, and Manage a Meeting by Susan M. Heathfield (2019). Most people are familiar with the “this meeting could have been an email meme,” because, all too often, we are stuck in meetings that have its participants zone-out to a PowerPoint or read packets of information that could have been dispersed to participants to peruse at their convenience.

The key to avoiding such time-wasting meetings, however, is to determine whether a meeting is even warranted by planning with the end goals in mind. If a meeting is warranted, then it should ensure appropriate participation. One way to prepare participants is by sending the appropriate information ahead of time so that meeting time isn’t wasted as a “read-in” or a lengthy PowerPoint presentation where one person is talking and others are not participating. Checking in with participants between meetings to ensure they are doing the requisite “pre-work” will help all participants come to the meeting prepared.

If all participants come prepared, the meeting time can be maximized for collaborative work. Attendees will feel more energized and motivated because they will be taking an active role rather than a passive role (as with meetings where information in thrown at them either in packets of documents or via a presentation).

Documentation of meeting minutes is a critical step as it keeps everyone accountable and acts as a single source of truth. If everyone is held accountable for their action items, this will contribute to more effective meetings and higher productivity.

Week 8: CST 438

This class has been a great one to take right before our capstone since it teaches and has us exercise best practices in software engineering. For example, the planning stage of any software development lifecycle is critical because it involves capturing what the stakeholders want–how to build the right thing and how to build it right. During my time at Qualcomm, I followed a Waterfall approach to my intern project and spent a good two weeks on the planning process. In this class, I was able to actively practice Agile with my group members, which involved a more rapid, but continuously iterative planning (and refining) stage.

Another great skill we exercised in this class is communication. Communication is not only important when it comes to soliciting user stories/requirements, but during the development phase among team members. When working on related parts of a microservice or even in a monolith, it is important to communicate what you are working on since it may affect what another teammate is working on. In addition to this, team members may have ideas for how you can approach a problem you are attempting to solve–but they would have no way of offering help if they never know what you are working on.

While “microservices” has definitely been a big buzz word recently, I had a vague understanding of what they were before this class. Now I understand that it isn’t a “silver bullet” and even new projects should start out as monoliths before the project is well-defined and easy to compartmentalize. While developing our final project with my group members, I definitely recognize that there are some pieces on the “front-end” of our project that could be further extracted out as microservices. For example, the front-end allows us to search for restaurants by utilizing the Bing Maps API and the Zomato API. We also include our own schema to store order details. The ordering system could be extracted out as its own microservices separate from the restaurant lookup system. However, this was not clear until we already had several iterations of a working prototype completed.

I was very excited to use Springboot in this class because it seems to be a popular framework in web development careers. Currently I am interning at a web development firm using primarily PHP and Drupal (though I’m on track to become an API Engineer and currently training on Apigee). However, I am eager to learn more web frameworks to open up even more opportunities in the future. This class pushed me to research Springboot’s documentation and community to learn how to implement things we didn’t cover in the scant four weeks before we began working on our final project. This, too, was an opportunity to exercise real-world skills as no one enters a job as a full expert the entire technology stack.

Finally, by exposing us to a longer term final project that spanned the latter half of the class, I believe I became better at delegating tasks. In most of our classes, we either have individual assignments or a short week-long group project. This puts diligent students in the habit of doing much of the work themselves, especially if there is a tight deadline. However, by giving us a longer span of time to interact and work together, I believe it was easier to involve everyone in the development process.

Week 7 – CST 438

This week we entered our third and final sprint for our final project. Our main focus this sprint was to ensure that all the pieces worked together. We also decided to fake sessions in a way by storing order data piecemeal into a separate session table until we could create the Customer, Order, and OrderLineItem(s) entities upon order check out.

Rather than storing a new row for each order line item, we decided to store the line items as a JSON string in the session table to parse through when it came time to generate the OrderLineItem entities. This meant that the team mates working on the front end had to figure out how to send the data as a JSON string so that it would work. We did a lot more pair programming this week than in any class, and I think it was great experience.