aggra-guide

FAQ

This wiki answers what I expect might be some frequently-asked questions about Aggra and more subtle points about Aggra’s design.

What are the Best Practices?

Here are some of the best practices for using Aggra:

Why are Graphs Static?

As mentioned in the basics wiki, graphs are static: nodes should exist for the lifetime of an application, beyond the scope of a single request. The alternative to static graphs would be dynamic graphs: nodes that are created freshly for every request to a graph. So, why are graphs static and not dynamic?

Considering the tradeoffs, Aggra prioritizes static graphs. You technically can create dynamic graphs for every request, but Aggra isn’t optimized and won’t optimize for this usecase.

Why can Nodes Call Dependencies in Ancestor Memories?

The basics wiki justifies why the creation of new memories and calls to dependency nodes there is allowed: to support iteration and reuse. It also provides one justification for a node needing to call a dependency in an ancestor memory: sharing results with other parts of the graph. There is, however, at least one other way to provide that ancestor-accessing feature: force users to pre-call and pass the results of these dependency nodes to the new memory in the form of input. Why doesn’t Aggra implement this model, instead?

Considering the tradeoffs, Aggra prioritizes modularity and latency (as two of its main features) at the cost of the inconvenient memory hierarchies and (probably safer) custom memory subclasses.

What are the Biggest Causes for Concern?

Here are some of my current biggest causes for concern/the things I’m most uncertain about in the current version of Aggra. It’s not that there aren’t tests for a lot of these, it’s just the complexity of each space and the lack of real-world use cases that provides pause.

What are Future TODO Options?

Here are some thoughts for future directions to explore with Aggra: