Milestone Report 1 - bounswe/bounswe2024group1 GitHub Wiki

Customer Milestone 1 Report

This milestone was focused on design, documentation and frontend/mobile development. We prioritized these to make sure we can show a demo with the most significant features. This allowed us to get feedback from the customer and to set the right direction for the project.

Project Status

We mainly focused on the documentation deliverables for this milestone, as well as the backend, mobile and frontend. We decided on what to show on our Customer Milestone presentation and focused on developing the features that we wanted to display.

In backend development, we implemented user management endpoints (GET, POST, PUT, DELETE for followers/following, Sign-up, Sign-in, and self-following) and introduced security filters for JWT-based authentication. Additionally, we worked on continuous deployment setup, fixed CI for the backend, and ensured authorization for all GET requests. On the frontend, we implemented components including the Profile Page, Question and Answer Cards, and Tag Search functionalities, alongside implementing the initial mobile components for the Answer, Question, and Tag views.

The documentation and DevOps teams also created our project structure by editing last year's requirements for this year’s specific needs. We also worked hard to create the Design Diagrams, in the light of the feedback we received for last year’s diagrams. We prepared use case, sequence, and activity diagrams, as well as detailing system, functional, and non-functional requirements. Additionally, the team organized the sidebar structure for CMPE451 documentation and set up templates for team-specific document workflows.

Planned Changes

Based on our customer feedback and team discussions, we plan to make the following changes in our next development phase:

  1. Tag System Refinement

    • Develop clear policies for tag creation and management
    • Integrate Wikidata for programming language and framework tags
    • Establish guidelines for user-created tags vs. system tags
  2. Question Classification System

    • Implement difficulty levels (Beginner, Medium, Hard)
    • Add categorization by computational concepts
    • Create a structured taxonomy for question types
  3. Development Process Improvements

    • Adopt a more iterative approach with regular customer feedback
    • Create and review mockups before implementation
    • Schedule regular customer check-ins for feature validation
  4. Technical Enhancements

    • Prioritize implementation of computational elements
    • Develop framework for code execution and testing
    • Enhance tag-based search and filtering capabilities
  5. Documentation and UI Updates

    • Clarify optional vs. required fields in registration
    • Improve user guidance for tag usage
    • Consider adding library-specific documentation sections

These changes will be prioritized based on technical dependencies and team capacity, with implementation beginning in the next sprint cycle.

Customer Feedback and Reflections

During the customer demo, we received valuable feedback and questions about various aspects of our system:

  1. Registration Location Field

    • Question: Why is location asked during registration?
    • Clarification: We explained that location is an optional field during registration
  2. Programming Language Focus

    • Question: When will programming language specific elements be implemented?
    • Response: We explained our plans to:
      • Implement filtering by frameworks and programming languages
      • Connect questions to tags fetched from Wikidata
      • Support computational elements in the system
    • Customer emphasized the importance of supporting computational elements
  3. Tag System Implementation

    • Question: Will users be able to create their own tags?
    • This sparked an important discussion about tag management
    • Customer suggested avoiding a fully user-community based approach like Stack Overflow
    • Need to establish clear guidelines for tag creation and management
  4. Development Process Suggestion

    • Recommendation to create mockups and schedule customer appointments before deep implementation
    • This will help align development with customer expectations early on
  5. Question Categorization

    • Suggestion to implement difficulty levels (Beginner, Medium, Hard)
    • Additional suggestion to categorize by computational concepts (recursion, dynamic programming, etc.)
    • Team agreed this would be valuable addition
  6. Library Documentation

    • Question about including sub-forums for libraries
    • This remains under consideration for future development

The feedback highlighted several key areas for improvement and clarification in our requirements and implementation plans. The team particularly noted the importance of:

  • Establishing clear tag management policies
  • Implementing question difficulty levels
  • Supporting computational elements more explicitly
  • Following a more iterative development process with regular customer feedback

Suggested Improvements

Based on customer feedback, we have identified several key improvements to be implemented:

  1. Tag System Specifications

    • Evaluate and define tag creation policies:
      • Consider hybrid approach combining Wikidata tags and user-created tags
      • Establish clear guidelines for tag management and moderation
      • Define validation process for user-submitted tags
  2. Question Difficulty Classification

    • Implement a three-tier difficulty system:
      • Beginner level for fundamental concepts
      • Medium level for intermediate challenges
      • Hard level for advanced problems
    • Add clear criteria for each difficulty level
    • Allow question authors to set appropriate difficulty tags
  3. Library Documentation Support

    • Expand tag system to include software libraries and frameworks
    • Consider dedicated sections for popular libraries
    • Enable filtering questions by library/framework tags

These improvements will be prioritized and discussed in detail during the next team meeting to create concrete implementation plans.

List and Status of Deliverables

Frontend Features

Requirements Addressed

The following requirements have been implemented in this milestone:

Software Artifacts

Our README contains the information about the project structure, deployment instructions, and other relevant information.

Each subdirectory (frontend/mobile/backend) has its own README file that contains information about the directory structure, deployment instructions, and other relevant information. These can be accessed via backend, frontend, and mobile.

Our CI runs can be accessed via Actions.

The deployment can be accessed here

Software Design Diagrams

Project Plan Evaluation

What Went According to Plan

  • The team successfully followed the planned development phases, starting with requirements gathering and moving through design, implementation, and testing.
  • The division of work between frontend, backend, and mobile teams was executed effectively.
  • Most planned features for this milestone were completed on time.
  • Code reviews were conducted regularly with knowledge sharing.

What Needed Adjustment

  • Initial timeline estimates for some complex features like code snippets and tag integration needed to be extended.
  • We had to adjust our approach to mobile development, opting to reuse frontend code where possible to improve efficiency.
  • The deployment process required more time than initially planned due to configuration challenges.

Impact of Changes

  • The decision to reuse frontend code in mobile development accelerated our mobile app development significantly.
  • Extended timelines for complex features resulted in higher quality implementations but pushed some lower-priority features to future milestones.
  • Additional time spent on the continuous deployment setup will benefit future deployments through the simplified deployment process.

Lessons Learned

  • More buffer time should be allocated for complex features and deployment tasks in future planning.
  • Early setup of development environments and CI/CD pipelines is crucial for smooth project progression.
  • Regular code reviews and pair programming sessions help maintain code quality and knowledge sharing.
  • Better estimation of task complexity is needed for more accurate timeline planning.

Tools and Process Evaluation

Development Tools

  • IDEs and Code Editors: Visual Studio Code proved highly effective for development across all platforms. Its extensions and debugging capabilities significantly improved productivity.
  • Git and GitHub: Version control and collaboration worked smoothly. GitHub's project management features, including issues and pull requests, were instrumental in organizing work.
  • Docker: Containerization helped maintain consistency across development environments and simplified deployment.
  • Github Actions: Automated testing and deployment workflows have been implemented successfully.

Communication Tools

  • Whatsapp: Served as our primary communication platform. The ability to hold polls was used effectively.

Project Management Approach

  • GitHub Projects: Used for task tracking and sprint planning. The Kanban board visualization helped identify bottlenecks.
  • Code Review Process: Mandatory reviews for all PRs ensured code quality and knowledge sharing.

CI/CD Pipeline

  • GitHub Actions: Automated testing and deployment workflows significantly reduced manual effort.
  • Deployment Strategy: Continuous deployment to DigitalOcean worked well after initial setup challenges.
  • Areas for Improvement: Need to add more automated tests and implement staging environments.

Testing Strategies

  • Unit Testing: Implemented for backend services and frontend components using Vitest.
  • Manual Testing: Comprehensive testing of UI flows and mobile features.
  • Future Improvements: Need to increase test coverage and implement end-to-end testing.

Individual Contributions

Mehmet Efe Akça

Responsibilities

I was responsible for the frontend, mobile and devops. I coordinated the deployments to production and mobile builds. I also coordinated the milestone report effort.

Main Contributions

In terms of design, I contributed to the requirements tasks majorly. I and Nazire utilized last year's requirements to create a starting point for this year's requirements. Then, we split the rest of the work into issues and assigned them to the team. We also took on a couple of these issues to speed up the process.

On the frontend, I set up the repo with best practices, by updating to latest packages and adding linting. I implemented the question page, answer view, tag search, code snippets, login/signup, and search page.

On the mobile side, I set up the mobile repo with best practices, with gluestack-ui components and Nativewind (This allowed us to speed up by reusing frontend code). I implemented the tag page, answer view, question view, and profile page by reusing frontend code.

On the devops side, I set up the DigitalOcean environment and configured the CI/CD pipeline. I also contributed to speeding up the backend tests by suppressing logs (which were overhead).

Code-related significant issues

  • Customer Milestone Report 1 #433
  • [DevOps] Deploy to DigitalOcean #370
  • [DevOps] Set up Local Development #355
  • Set up Frontend #353
  • [Frontend] Implement Code Snippets #371
  • [Frontend] Implement Question Card #369
  • [Frontend] Implement Answer Card #368
  • [Frontend] Implement Tag Search #367
  • [Frontend] Implement Answer View #365
  • [Frontend] Implement Question Page (w/o answer) #363
  • [Frontend] Implement Login/Signup Flow #359
  • [Mobile] Implement Tag Page #423
  • [Mobile] Implement Answer View #422
  • [Mobile] Implement Question View #421
  • [Mobile] Implement Profile #420
  • Initialize mobile #378
  • Implement Continuous Deployment #375

Non-code related significant issues

  • Frontend Requirements and User Interface Guidelines #342 (Documentation)
  • Non-Functional Requirements: Performance, Security, and Accessibility #341 (Documentation)
  • System Requirements: Wikidata Integration #339 (Documentation)
  • Choose a standard for the project #335 (Chore)
  • Create Class Diagrams #352 (Medium Priority Documentation)
  • API Schema #348 (Backend Documentation)
  • Change search UI design to dropdown #366 (Medium Priority Design)

Merged PRs

Aslı Gök

Responsibilities

For this milestone, I was mainly responsible for UI design on Figma with Nazire, creating scenarios and mockups with Nazire and Tarık and I was in frontend development team.

Main Contributions

I have designed UI and reviewed/fixed software design diagrams with Nazire, also created mockups for the scenarios by hand, implemented Tag page in frontend for the demo, taken notes regarding the customer feedback during the demo and shared with the team for future developments.

Code-related significant issues

  • [Frontend] Implement Tag Page (#362)

Non-code related significant issues

  • Milestone 1 Tracker (#361)
  • Create Scenario and Mockups (#347)
  • Figma UI Design (#346)
  • Functional Requirements: Feed and Search (#338)
  • Fix Sequence Diagrams (#430)
  • Fix Use Case Diagrams (#429)

Atakan Yaşar

Responsibilities

Worked on backend, database and bugs.

Main Contributions

Created Class diagram, Backend CI and reviewed backend pull requests.

Code-related significant issues

Non-code related significant issues

  • :link: Create Class Diagrams #352

  • Additional information: To contribute mobile project, tried to build the mobile project. But failed to build it even though tried to solve the problem for ~10 hours.

Enes Başer

Responsibilities

Generally dealed with backend, database structure & security part of the web. Also being responsible for determining field names and and classes in Wikidata which we will be using.

Main Contributions

Reviewed requirements,class diagrams to check if there is mismatch between our future plan. Mostly, contributed to implementing backend part & help other team members to solve some problems happened in backend.

Code-related significant issues

Non-code related significant issues

  • Reviewed requirements and helped to design class diagram.

Nazire Ata


Çağatay Çolak

Responsibilities

I mainly worked on the diagrams part of the project and helped Enes Başer with the backend by writing endpoints for our project.

Main Contributions

My contributions to the project's first milestone include creating diagrams, researching concepts and documenting them, writing new endpoints, and editing things.

Code-related significant issues

  • Implement GET users/{userId}/following (#417)

Non-code related significant issues

  • Create Responsibility Assignment Matrix (RAM) (#435)
  • Create Use Case Diagrams (#351)
  • Create Activity Diagrams (#350)
  • Create Sequence Diagram (#349)
  • Functional Requirements: Posts and Interactions (#337)
  • Research and Document W3C Standards (#344)
  • Create 'Guidelines and Resources', 'Personal Pages', 'Document Templates' and 'Researches' pages for the new term and edit the sidebar to make it clear by removing the 352 related contents (#328, #329, #330, #331, #332, #343)

[Previous PR section remains the same]

Tarık Can Özden

Responsibilities

Worked on functional requirements, milestone scenarios and research.

Main Contributions

Wrote milestone scenarios and functional requirements for personalized recommendation system.

Code-related significant issues

Non-code related significant issues

Pull Requests

Additional Information

Researched personalized recommendation systems, document embedding techniques and encoder-only models like BERT for text similarities.