<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/journal-entry-9-every-point-tells-a-story-dmhvupj1j" -->

---
title: Journal Entry 9 : Every Point Tells a Story | daily.dev
description: A school principal building a student recognition app shares how a key architectural decision changed his approach: instead of storing a running points total,...
canonical: https://daily.dev/posts/journal-entry-9-every-point-tells-a-story-dmhvupj1j
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: Journal Entry 9 : Every Point Tells a Story | daily.dev
og:description: A school principal building a student recognition app shares how a key architectural decision changed his approach: instead of storing a running points total,...
og:url: https://daily.dev/posts/journal-entry-9-every-point-tells-a-story-dmhvupj1j
og:image: https://api.daily.dev/og/posts/dmHVUPj1j.png
og:image:alt: Journal Entry 9 : Every Point Tells a Story
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Journal Entry 9 : Every Point Tells a Story

**[Medium](https://daily.dev/sources/medium_js)** · 7 min read · 0 upvotes · 0 comments

## Summary

A school principal building a student recognition app shares how a key architectural decision changed his approach: instead of storing a running points total, the app records individual recognition events — similar to how banks store transactions rather than just a balance. This shift enables auditability, duplicate detection, and approval workflows. The post walks through the reasoning behind event-based data modeling, a Flutter code snippet using the Repository Pattern, and how thinking in terms of 'what happened' rather than 'what is the current state' shapes the entire application design.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://medium.com/flutter-community/journal-entry-9-every-point-tells-a-story-03591e94e6ff>

## Questions this post answers

### Why should an app store individual events instead of just a running total, like points or balance?

Storing only a final total loses the history behind it, making it impossible to investigate disputes, duplicates, or errors later. Banks solve this by storing every transaction rather than just a balance; applying the same idea, a points system stores individual recognition events with fields like who awarded it, why, points, category, and timestamp, so the total can always be reconstructed and audited.

_Developers debating aggregate versus event-based data models can compare real architecture tradeoffs on daily.dev._

### How do you avoid directly mutating a score or balance field in a Flutter app using the repository pattern?

Instead of updating a total points field directly, create an immutable record representing what happened and save it through a repository, for example a Recognition object with studentId, teacherId, categoryId, points, reason, and awardedAt, then call recognitionRepository.create(recognition). The repository becomes the single source of truth, keeping business logic separate from the UI and making the app easier to test and maintain.

_Flutter developers refining repository-pattern designs can find related architecture write-ups on daily.dev._

## Similar posts on daily.dev

- [Developers' tips for Event Sourcing & EDA](https://daily.dev/posts/developers-tips-for-event-sourcing-eda-9ezyc9slp) · Event Store · 0 upvotes · 0 comments
- [The Architecture of Systems That Must Remember Everything](https://daily.dev/posts/the-architecture-of-systems-that-must-remember-everything-m0bpl72tp) · Medium · 0 upvotes · 0 comments
- [We mistook event handling for architecture](https://daily.dev/posts/we-mistook-event-handling-for-architecture-ox5jylwip) · InfoWorld · 0 upvotes · 0 comments
- [Event Sourcing: A simple trick to get around read models](https://daily.dev/posts/event-sourcing-a-simple-trick-to-get-around-read-models-ojkizhdey) · We Are .NET · 0 upvotes · 0 comments
- [Data is the application](https://daily.dev/posts/data-is-the-application-8lig6hx9p) · Mattias Geniar · 10 upvotes · 2 comments

---

Tags: [#architecture](https://daily.dev/tags/architecture), [#flutter](https://daily.dev/tags/flutter)

[View this post on daily.dev](https://daily.dev/posts/journal-entry-9-every-point-tells-a-story-dmhvupj1j)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"Journal Entry 9 : Every Point Tells a Story","url":"https://daily.dev/posts/journal-entry-9-every-point-tells-a-story-dmhvupj1j","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/journal-entry-9-every-point-tells-a-story-dmhvupj1j"},"datePublished":"2026-07-23T17:01:35.881Z","dateModified":"2026-09-13T21:42:17.635Z","description":"A school principal building a student recognition app shares how a key architectural decision changed his approach: instead of storing a running points total,...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/9f365685d7aed2833c8c2d909a52f0af?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/9f365685d7aed2833c8c2d909a52f0af?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"Medium","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"Medium","logo":"https://media.daily.dev/image/upload/t_logo,f_auto/v1/logos/medium","url":"https://daily.dev/sources/medium_js"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/journal-entry-9-every-point-tells-a-story-dmhvupj1j","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":0},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"architecture,flutter","timeRequired":"PT7M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Medium","item":"https://daily.dev/sources/medium_js"},{"@type":"ListItem","position":3,"name":"Journal Entry 9 : Every Point Tells a Story"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/journal-entry-9-every-point-tells-a-story-dmhvupj1j#faq","mainEntity":[{"@type":"Question","name":"Why should an app store individual events instead of just a running total, like points or balance?","acceptedAnswer":{"@type":"Answer","text":"Storing only a final total loses the history behind it, making it impossible to investigate disputes, duplicates, or errors later. Banks solve this by storing every transaction rather than just a balance; applying the same idea, a points system stores individual recognition events with fields like who awarded it, why, points, category, and timestamp, so the total can always be reconstructed and audited. Developers debating aggregate versus event-based data models can compare real architecture tradeoffs on daily.dev."}},{"@type":"Question","name":"How do you avoid directly mutating a score or balance field in a Flutter app using the repository pattern?","acceptedAnswer":{"@type":"Answer","text":"Instead of updating a total points field directly, create an immutable record representing what happened and save it through a repository, for example a Recognition object with studentId, teacherId, categoryId, points, reason, and awardedAt, then call recognitionRepository.create(recognition). The repository becomes the single source of truth, keeping business logic separate from the UI and making the app easier to test and maintain. Flutter developers refining repository-pattern designs can find related architecture write-ups on daily.dev."}}]}
```

