Now that we have developed the complete functionality of our application, we can spot some problems in our current design. For instance, the App class has several responsibilities, from instantiating Tkinter widgets to executing SQL statements.
Although it seems easy and straightforward to write methods that perform an operation from end to end, this approach leads to code bases that are harder to maintain. We can detect this flaw by anticipating possible architectural changes, such as replacing our relational database with a REST backend accessed via HTTP.