Last week, I started refining the project’s direction and made progress on the project itself. I drafted my project proposal, aiming to create a set of concrete yet flexible goals for the semester. As for the project itself, I mainly worked on the redesign of the backend, specifically the friendship domain. I had been struggling with maintaining atomicity while keeping business rules out of the repository layer. The solution I found was making the repository layer stateless and developing a unit of work abstraction that the service layer depends on. This way, the service layer passes a database connection to the repository layer with each call, allowing the service layer to own and orchestrate transactions. Since the service layer’s dependency is on a unit of work abstraction I control, I can pass in the real database pool or a mock implementation for testing.
This week, I will work on isolating the domains from each other and my app core from infrastructure. In the current design, there are some dependencies between domains themselves, namely services depending on other services and joins/subqueries in the domain repositories’ SQL. This design is resulting in tradeoffs like the one I began to address last week, as well as other issues like service functions that essentially just wrap repository calls without much meaningful contribution. By moving some of this multi-domain logic into application services and read modules, I will able to create a more clearly divided architecture. This process is already underway, and I aim to finish it relatively quickly (at most 1-2 weeks) so that I can move on to other issues such as testing handler functions.
Since this is a solo project, there are not really any impediments or blockers in the standard sense coming from other team members. However, I am working on potentially getting an internship. Since I do not know yet when and if this may happen, I am less able to accurately gauge my commitments for the semester and plan accordingly.
The process I used last week was mainly characterized by getting ChatGPT to explain concepts to me, supplementing that with documentation and YouTube, and writing the code myself. I sometimes feel like I should be trying to move more quickly by using something like GitHub Copilot, Cursor, or Claude Code, which would theoretically allow me to spend more time and energy on higher-level and larger-scale concepts. At the same time, I feel resistant to that change and uneasy when I’ve briefly tried such tools. Although I’m moving more slowly than I theoretically could be, I feel like I’m learning a lot by coding “manually.” I don’t see my aversion to these tools changing in the near future unless I make a conscious effort to force myself to get comfortable with them. That may be what I end up choosing to do, but as of now, I plan to continue with a similar process as last week.