Projects Retrospective

James
2 min readJan 1, 2024

--

HaskGit

  • Spend a significant amount of time researching domain knowledge in the initial phase of the project. This will save a considerable amount of time in the future, providing the best possible understanding based on the time you invest. An example would be knowing the exact encoding that the hash value uses in Git objects.
  • Create functions that are helpful for debugging and modularize them for future use (e.g., git cat-file, git status, decompressAndPrint file based on hash, etc.). It may seem like extra work, but it will be worth it in the future.
  • Try to make the code as bug-free as possible initially. Spend more time designing algorithms and high-level abstractions. Define the signatures of the functions first and then fill them in.
  • Learn test-driven development; you’ll be thankful when you don’t have to do manual testing during development.
  • Never blame teammates for mistakes or lack of knowledge. Try your best to ensure everyone on the team is on the same page. Remember that you may be the one lacking knowledge or making a mistake at some point in your life.
  • Start early! There will be bugs in the code.
  • Listen to your teammates; they may have the most important information you need to know at the moment.
  • Be emotionally intelligent. Consider the best move you can make currently instead of following your emotions.
  • Pinpoint the buggy part of the code and examine why it is buggy (e.g., lazy evaluation + shadowing).

Wrist Watch Operating Systems

  • Know the language well (research how it can be written more idiomatically if there is a code smell; be aware that macros can cause unexpected behavior; be extremely careful when dealing with pointers).
  • Divide the project into small tasks.
  • Define the interface of all the functions needed for each part’s functionalities. While there’s no need to be super strict, be aware of the high-level abstraction of what each function is supposed to do.
  • Write tests or conduct manual testing for each function you write; it will save time in the future.
  • Write functions that will be used in multiple places first.
  • Write functions that will be useful for debugging.
  • Understand how hardware works; read the manual to know exactly what you need to do to interact with hardware (and write comments for the parts that interact with hardware).

--

--