Keep in mind that `entries.remove(0)` is an expensive operation on an `ArrayList`: the rest of the array (indexes `1...N`) must be moved. If there are more removes than lookups (= if the log is normally at full capacity, so that every `append` operation triggers a `remove(0)`), then a `LinkedList` would be more efficient. Having the state of an `offset` in this class violates the single responsibility principle. The class has 2 responsibilities now: 1. Add log entries 2. Manage state of an offset for viewing You should split the class to separate these responsibilities. Let `Log` focus on logging only, and I suggest to rename it to `Logger`, to make it more specific and clear. Move the `offset` and its methods to another class, for example `LogViewer`. `LogViewer` can have a `Logger`, and an `offset`, and present a view from the `Logger`'s entries based on the `offset`. Avoid using a `Constants` class. It breaks encapsulation. Its current fields are only used by the logger class. It would seem best to make them private. If another class needs to know these values, they can get them from the logger class. About naming, **do** follow the suggestions of [@Sleiman Jneidi][1]. Readability is very important. [1]: https://codereview.stackexchange.com/users/45946/sleiman-jneidi