Julia developers typically do not structure code to follow classic OOP design patterns. Julia does not have interfaces or property inheritance which most of these patterns rely upon. Instead Julia leverages principals such as dynamic dispatch and composition. See Composition and inheritance: the Julian way. Also, in regards to the code you have so far, while you are free to structure the code however you want and I think the way you have divided up the code into multiple files is fine, but generally I would try to avoid using sub-modules as much as possible. Ideally there would be one main module for your package. Im not sure why the linter would not work with just one module.