+
+
| Quality Attribute | +Architectural Strategy | +Implementation Details | +
|---|---|---|
| Reliability | +Transactional File Operations | +All operations on the user files should either work completely for the entire operation or not modify the user's files at all. | +
| Performance | +Concurrency | +Leverage our master slave pattern to break slow requests into smaller operations which may be run concurrently. | +
| Performance | +I/O overhead | +Minimize the number of times files need to be opened to reduce I/O overhead. | +
| Scalability | +Horizontal Scaling | +Create more instances of Python slaves to increase throughput for high demand. | +
| Usability | +User-centered design | +Conduct usability tests, provide intuitive navigation, and minimize complexity. Provide accessible interfaces appropriate for users of varying skill level | +
| Modifiability | +Modular, loosely coupled architecture | +Design the system such that all operations accept various parameters while still having default ones. Allow users to customize these parameters from the user-interface. | +
+
+
| Concept | +Python | +Go | +Flutter (Dart) | +
|---|---|---|---|
| Variables | +snake_case | +camelCase | +camelCase | +
| Functions / Methods | +snake_case (Use type hinting) | +camelCase (unexported), PascalCase (exported) | +camelCase | +
| Constants | +ALL_CAPS | +PascalCase (exported), camelCase (unexported) | +camelCase | +
| Classes / Types | +PascalCase | +PascalCase | +PascalCase | +
| File Names | +snake_case.py | +camelCase.go | +snake_case.dart | +
| Packages / Modules | +snake_case | +lowercase (no underscores) | +snake_case | +
+
+
+
+
+
+
| Technology | +Options | +Benefits | +Drawbacks | +Final Choice Reasoning | +
|---|---|---|---|---|
| Frontend Framework | +Flutter | +
+ Cross-platform (Both Desktop and Mobile) + Native performance + Material UI widgets + |
+
+ Larger binary size + |
+ Chosen For its ability to create cross platform desktop apps. | +
| Electron | +
+ Easy integration with web + |
+
+ Heavy memory usage + Does not directly support mobile (Needs Capacitor or Cordova) + |
+ + | |
| React Native | +
+ Cross-platform mobile/web + |
+
+ Weak desktop support + |
+ + | |
| AI Capabilities | +Python | +
+ Well supported for AI purposes (We use SciKit) + Fast development + |
+
+ Slower runtime performance + Weak multithreading support + |
+ Chosen For its out of the box AI functionality and portability | +
| Java | +
+ High performance + Strong threading and ecosystem + |
+ + Slower dev speed for AI + | ++ | |
| C++ | +
+ High performance + Fine-grained control + |
+
+ Unreliable due to no memory safety + |
+ + | |
| Filesystem management & Bridge | +Go | +
+ Easy concurrency with goroutines + Fast compilation + Simple learning curve + |
+
+ Less dynamic than scripting languages + |
+ Chosen For powerful concurrency features to balance out python bottleneck & Easy web development for endpoints required by frontend | +
| Rust | +
+ High performance + Memory Safety + |
+
+ Extreme learning curve + |
+ + | |
| Java | ++ Portable due to JVM + | ++ Verbose and heavyweight for lightweight APIs + | ++ | |
| API | +gRPC | +
+ Very fast due to binary serialization + Code generation support + Strong typing + |
+ + Requires more setup than REST + | +Chosen For efficiency between Go and Python. See grpc.md | +
| REST | +
+ Simple and well-understood + Easy testing and debugging + |
+
+ No built-in type safety + Not ideal for dynamic recursive structures like Directories + |
+ Chosen For easy to use and test endpoints between Go and Frontend | +|
| GraphQL | +
+ Flexible queries + Efficient data fetching + |
+
+ Overkill for simple RPCs + More complex tooling + |
+ + | |
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+