Baja-Charter/Software/SoftwareSpecific.md

18 KiB
Raw Blame History

Software Charter

Authors and when it was updated

  • Brock (2025)

How does Software Fit in?

What is Software at Baja

Software in Baja currently means the support team of the club through the development of software applications. This could be done by the use of our cloud to make running/operating the club cheaper, why pay for something when it can remade for free. Such projects include the BajaCloud which in itself contains the interview booking backend and the reimbursement backend. This does not mean the software can transform into a simulation, embedded programming team, data collection/transformation or cloud team. The options are up to what the lead decides/imagines best.

The Future of Software

The Future of Software is in lidar track data collection and inputting into BEAMNG.drive and create a simulation of the car every year with current tracks, I hope that the team uploads the car cad/model and track to Steam and releases it for free.

The future could also be in embedded/testing systems on the physical car, as of right now I would suggest rust as a primary language due to its speed, safety and high-level features such as a formatter, inferring and package manager (crates).

Core Beliefs of Software

Repeated again for Highlighting

You get out what you put in.

If you don't show up and do work you don't learn anything from more Senior Members or from past mistakes you CAN and should make.

To further emphasize this the core belief that the software lead should have is that:

  • We GET to work at building something cool and then go home after the day is over.

This is to further emphasize that it is a privalige to do work at Baja but also baja is not a job its a place to learn additional skills that the school cannot teach intensively, such as code smells, reviewing code, and project mangement.

This is NOT a core belief and more so an interesting world veiw on everything you will do and have done

Communication both written and oral is based on signals or promises with the receiving party obtaining those signals and promises.

This also applies to coding, particularly in HTTP requests.

Who to Recruit especially in Software

This is directly taken from the 2018 Baja Charter and repeated again to highlight its importance.

It is important to note that UCalgary Baja does not exclusively recruit “car enthusiasts”. UCalgary Baja provides you with opportunities to realize your developmental aspirations.

I would look for anyone who is passoinate or wants to learn in their appilcation, this shows that they want to do software, you will be able to tell if it is a mech application, use your judgement to determine if you want the mech applicant

Coding Coduct

This section outlines how programming and coding in all languages should generally be followed:

  1. Readable code is valued above all else ie. Variable names that make sense, clear function names
  2. Comment code even if it is obnoxious make it so that you or anyone besides yourself in 10 years can read what is going on.   Programs like ChatGPT are allowed to comment code automatically just as long as they make sense to you six months down the road [Here] is some guideline of when and when to not comment
  3. Use the Prettier extension as the default code formatter or use the rustfmt commnad so that the code is consistent
  4. Use git and use a new branch to create a new feature (be careful of the base of the branch)
  5. Use pull requests to the dev branch to merge code
DO NOT PUSH CODE DIRECTLY TO THE PRODUCTION BRANCH (main or master normally)
  1. Examples of base templates in most common languages are available here
  2. Try to make code as modular and reusable as possible
  3. It is up to the lead of the project as well as other factors (like relative skill level) but test driven development is preferred
  4. Google Docs or Stack overflow before using ChatGPT
  5. Use ChatGPT but be warned you will spend more time on debugging than coding and most importantly YOU WONT LEARN, USE IT FOR REGEX
  6. Please do not become a "human clipboard". At that point you do not get anything out of coming to baja
  7. Please include a permanent email and name if you write any code, this is just for questions on what x does (not mandatory)
    • If you write unreadable code you get emails in the future about it
    • Remove emails if completely refactored (75% of the code has been changed in some way)
DO NOT USE THIS TO GET ALUMNI TO DO YOUR WORK

How To's

A quick cheatsheet on how to use git can be found here

Function Templates/Function Starters For commenting can be found here

Operation of the Team (Software Specific)

 Organization Structure

Team Structure and Reporting Hierarchy

This document outlines the reporting structure within the Software Subteam. Each role has specific responsibilities and reports to different levels of the team.

Captain of Baja

  • Can overrule task approval

  • Can suggest projects

    Software Lead

    • Reports to: Captain of Baja

    • Chosen by: Software Subteam and approved by Captain or voluntold by Captain

    • Min Requirements: Not a Junior in the same year

    • Roles: Mentor, code reviewer, task giver, project scheduler, designer, project/design approver, sysadmin of cloud/NAS

    • Language Access: Python, HTML, CSS, JavaScript, YAML, JSON, XML, Lua, Rust, C, C++/Arduino, Java (please avoid), Golang, Terraform, Bash, Docker, Kubernetes, GitHub Actions

    • Summary: They run the Software Subteam, have lots of projects complete, ensure that the cloud runs smoothly, enforce good coding practices, give out tasks/projects to senior members and approve.

      Future Software Lead
      • Reports to: Software Lead
      • Min Requirements: 2 years with the club
      • Roles: Mentors, can be sysadmin of cloud/NAS, code reviewer, designer, task giver
      • Language Access: Python, HTML, CSS, JavaScript, YAML, JSON, XML, Lua, Rust, C, C++/Arduino, Java (please avoid), Golang, Terraform, Bash, Docker, Kubernetes, GitHub Actions
      • Summary: Experienced member, teaches others, enforces coding practices, and designs/feedback on projects, should run atleast one project with the support of the software lead, this is in order to get them comfortable with the role.
      Senior Member
      • Reports to: Software Lead and Future Software Lead

      • Min Requirements: 2 years with the club

      • Roles: Mentors, can be sysadmin of cloud/NAS, code reviewer, designer, task giver

      • Language Access: Python, HTML, CSS, JavaScript, YAML, JSON, XML, Lua, Rust, C, C++/Arduino, Java (please avoid), Golang, Terraform, Bash, Docker, Kubernetes, GitHub Actions

      • Summary: They have a lot of projects complete, they are here to teach, give out tasks, enforce good coding practices and design how a project should be made with their designs and feedback.

        Intermediate Member
        • Reports to: Senior Member
        • Min Requirements: 1-1.9 years with the club
        • Roles: Mentor (possibly), Mentee (probably), code reviewer (possibly), design input (probably), designer (possibly)
        • Language Access: Python, HTML, CSS, JavaScript, YAML, JSON, XML, Lua, Rust, C, C++/Arduino, Java (please avoid), Golang, Bash (basic commands and git), Docker, Kubernetes
        • Summary: They have a few project(s) completed, they are still mostly here to learn, they can give better feedback on designs than juniors (starting to understand)
    Junior Member
    • Reports to: Software Lead and Senior Member
    • Min Requirements: New to the club this year (0-0.9 years)
    • Roles: Mentee (Need, dependent on year), design input
    • Language Access: Python, HTML, CSS, JavaScript, JSON, XML, JSON, Lua, Golang (as pair programming), Rust (as pair programming) Bash (basic commands and git)
    • Summary: They are new and here to learn, they can give limited amounts of feedback about designs (due to a lack of knowledge)

Additional Context

This structure aims to provide a guide to members of software.

This does not mean that it is rigid it is a general guide to how the team members should operate and the level of expectations on them.

Lanaguage Access

This does not mean that anyone on any level of the hierarchy is not able to code in those languages Willingly it is meant to be interpreted as a guard for those who are lower in the chain from going into more difficult languages such as C or rust where the understanding is not able to be taught by the university in their first or second years.

Roles

This gives the expectation of the person the newer one is to the club the less they are expected to know and do for the software subteam.

Reports to

This is the group who is in charge of you the lead is not able to handle 8 people all on their own they need help, your mentor is there to help the Lead and future Lead and filter out a lot of the questions and task giving.

The Captain most likely cannot help with software please go to the Software Lead as a last resort

Pair Programming

This is a technique in programming where a mentor and mentee are paired up the mentee is expected to write the code and the mentor is expected to drive/tell the mentee what to write.

This is in hopes of giving the mentee exposure to the language and general programming concepts so that they may level up their skills.

Roles and Expectations

based upon the 2018 Baja Charter, taylored to software

All Members

  • Your position on this team is a privilege, not a right.
  • All members will follow through with commitments in a timely matter or inform your Team Lead/Team Captain if you cannot.
  • Will be present and attend meetings/workdays on time at the times specified.
    • Unless Exceptions are given either by the Software Lead or Team Captain
      • This includes an Internship program where Wednesdays are optional
      • Exams always
      • Safety always
      • Software Lead is on Internship, Wednesdays will either be optional or lead by a Senior member or Future Software Lead
  • Team members will need to be a part of all phases of your assigned project and possibly projects that you aren't part of - Design, & Coding. This ensures that mistakes, issues, and concerns are addressed ASAP and corrected accordingly.
  • Asking questions is encouraged and is the greatest way for you to learn. Every member will be open to taking questions. If you are unable to answer a question either admit that “I dont know”, or suggest someone who may be better qualified to answer the question. Asking questions is beneficial for both parties as it expands the askers knowledge base, and keeps the question recipient current with their knowledge

Juniors

  • Are expected to work and ask questions. Enthusiasm to learn and a positive attitude is a must!

Intermediates

  • In addition to Junoir Member roles and expectations:
  • Expected to carry out some of their own research and ask whatever questions they may have about their project. They may not necessarily know everything about the language/project but must make an effort to verse themselves as completely as they can.
  • Can Volunteer to teach Juniors and other members new skills and assist in the transfer of knowledge.
  • A Developmental level amount of time management to ensure adequate research and development of your design projects is a must.

Seniors

  • In addition to Intermediate Member roles and expectations:
  • Expected to carry out their own research and ask whatever questions they may have about their project. They may not necessarily know everything about the language/project but must make an effort to verse themselves as completely as they can.
  • Are expected to be able to take on more challenging design projects on the vehicle.
  • Effective time management to ensure adequate research and development of your design projects is a must.
  • During each season, must be willing to teach Juniors and other members new skills and assist in a transfer of knowledge.
  • Can request a member be reassigned to another group
  • Must check in regularly with everyone in their group to ensure they are learning and making progress on a weekly or bi-weekly basis.
  • Reports will also be conducted by the team lead

Team Leads

  • In addition to Senior Member roles and expectations:
  • Are responsible for all members, projects, components, and hardware within their system. If progress is not being made, it is their responsibility to work with the designer/programmer to ensure timelines are met.
  • May assign and reassign projects as they see fit.
  • Must empower, guide, and facilitate their members learning and projects.
  • Must check in regularly with everyone on their system team to ensure they are learning and making progress on a weekly or bi-weekly basis.
  • Enforce with encouragement what teammates are learning and provide insight on their designs.
  • Will work alongside their future lead. This does not mean offloading your workload to the future lead as a means to shy away from Baja's responsibilities and commitments.
  • Expected to be the final decision maker regarding any project within their system.
  • The Software lead will be in consistent contact with Senior members to ensure that a project is running smoothly.
  • Team leads will be in consistent contact with one another (primarily Electrical and Business) to ensure designs housed/shared by systems are working in tandem.

Future Team Leads

  • In addition to Senior Member roles and expectations:
  • Work alongside their team lead to learn how to manage the system team
  • Act to the best of their ability to aid and advise the system team lead concerning current and future work and tasks to be done
  • Act to the best of their ability to provide design insight to fellow system teammates under the direction of his or her system lead

Seasons

There are multiple phases throughout the year. As UCalgary Baja is a competition team focused on performing well all members are expected to have full involvement in each phase. The Baja year can be broken down into the following cycle (It is important to note that each phase may feather into one another):

Timelines in Software are flexible this is a guide to the year not a set in stone, some project scopes may take longer than others.

Summer - Testing Software

The software could get involved in this time, this time should primarily be used for the setup/preparation for the new season, recruitment period, and any SSAF requests and allowing for the new lead to get situated and plan the projects for the year, this time also allows the old lead to mentor as well as they can the new lead. This is a time where a break can be taken such as only meeting every second week.

Fall Semster 2025 Season Edit Whole Team

A number of deliverables get done

  1. SSAF funding for the main manufacturing period (Winter Semster)
  2. Recuitment

Fall Semester - Easier Projects Software

This is the time when either your first or the easier projects happen, typically the projects involve higher-level languages like Python, JavaScript, HTML, CSS or high-level programming where the background level is low, it should be typically reserved for learning opportunities even if the club needs the tool. This is a time for learning and enforcing good programming rules. Recruitment also happens during this time which reduces the amount of time able to be spent on complex projects.

Winter Semester - Harder Projects Software

The concepts learned from the fall semester are now built upon in more difficult tasks such as testing (boundary, inner whatever the lead decides is appropriate to accomplish) This time can also be spent wrapping up easier projects, possibly continuing on with projects that were originally thought to be easy but instead turned out to be difficult

Late Winter to Early Spring Software

No changes from the start of the Winter Semester The addition of the Online Cost Report is the responsibility of the lead and senior members collaborating with electrical members. Rules for software as of the 2025 season If any data collection system is on the car it must be included then a software component of the Online cost report must be completed.

The SSAF travel fund is a priority and any work can be stopped to help finish it

We do not go to comp if no SSAF travel fund is completed

Just Before Competition 2025 Season Edit Whole Team

A SSAF funding round happeens so that we get buy things for the Fall Semster manufacturing period

Just Before Competition Software

Rewrite/Todo

If reasonable Software transforms into the tool fetchers if work is behind

Other tasks include cleaning the truck (with a shop vac) cleaning the trailer (sweeping dirt out) and removing any garbage from the truck and trailer.

The reason why is that your fellow members are going to spend 10+ hours living there, so make sure it is comfortable for them and so that they do not have to clean it before driving to the competition

Reasonable is no juniors or other members available to perform this task.

The highest priority is to get the car out the door.

May to June - Competition

The moment weve all been waiting for! Competition is where all your blood, sweat, and tears invested in the vehicle pay off. It is the ultimate testament to what the vehicle was designed to do. The competition consists of static events (business and design presentations), dynamic events (acceleration, maneuverability, hill climb, suspension & traction, and rock crawl), and finally a 4-hour endurance race.

May to June - Competition Software

We help where we can, that could be running the sim for the driver, fetching tools (hence why the previous phase), taking photos, helping businesses, helping where you can

Repeat

Summer is the transition phase, and Fall is the start of a new season Prepare for the next phase as well as you can