# EPF week 11 & 12 I am currently developing multiple versions of the same tool with distinct functionalities: one version to quickly provide statistics, another to deliver stats in a block-wise manner, and a third version, the stat analyzer, designed to work within the client environment. Due to the different requirements of these versions, I've encountered significant code coupling and increased complexity. To address this, I implemented a quick and dirty solution for processing transaction statistics asynchronously. However, this approach resulted in the tool becoming tightly coupled with instance management and synchronization. The main goal was to ensure that no stats processing occurs while transactions are actively processed in the EVM. Instead, the stats execution is triggered during brief periods of EVM inactivity, specifically at the end of a transaction and block execution. Despite writing tests, the second version of the tool has a fatal flaw: it is not fulfilling its core function of providing top N-grams. Interestingly, the earlier version performed this task more effectively. On the other hand, the third version has successfully minimized complexity by focusing primarily on its main objective of accumulating statistics, while the tests for its underlying duty are ongoing. Additionally, ongoing work is being done to ensure that the Stat Analyzer can handle any volume of data. To achieve this, i'm exploring and experimenting with log scales in yet another version of the tool.