Basically, we're going to create an interface class which abstracts out the guts of Tahrir, and every GUI that we make will extend it, the desktop application, browser application, mobile phone application, all of them.
Right now, we have to be passing around a Node object, and calling methods from that class and various other classes from "back end" aspects of Tahrir, all of which may possibly be changed if we want to change the way the back end works, which if we did would break all of our GUIs, which is obviously bad- in other words we haven't been using the Model View Controller design pattern.
The GUI only needs to interface with the "back end" in 3 ways, 1) to create a new user identity, 2) to broadcast a message to other nodes, and 3) to receive messages from other nodes (so that those messages can be displayed however the user wants). To that effect, the boilerplate code that we've just written has only 3 methods. So the idea is we'll just implement that once, and all the GUIs will call those methods. It'll be much cleaner than what we have now.