Like most other people, I like a nice graphical user interface. The best GUIs on the market today don’t just make a program look good, they make interacting with the software a lot easier. I doubt there’s a person alive that wouldn’t agree that the graphical user interface is one of the most important innovations in personal computing. Without it, the use of computers wouldn’t be as widespread as it is today. That said, a GUI doesn’t always make life easier. I would argue that when applied to more complex and/or less standardized tasks, it can backfire and actually make things more difficult. I recently bumped into this problem, when I was asked to build a few dashboards in Microsoft PowerBI. This task inspired me to make the case for more fine-grained control in this type of process.
I’ll first clarify what a good user interface – graphical or non-graphical – in my opinion should provide. As an end user, I want to achieve some sort of goal. The user interface should supply the most effective route to achieve that goal. For instance, at this moment my goal is to write a blog post, so I opened a text processor to write down my thoughts. The user interface of this text processor should provide for effective “input, editing, formatting and output of text”. In other words, a good user interface takes away the obstacles that stand between the user and the end goal. For argument’s sake, let’s assume that the GUI in Microsoft Word solves this problem reasonably well. Since the basics of writing text is a fairly simple process (we’ll save the more complex forms of word processing for another day, since that opens Pandora’s box of bad design again), I’d say it lends itself well for a GUI that streamlines the user experience. Just open a blank document, and start typing away!
On the other hand, the set of actions a user wants to perform in a tool like Power BI, isn’t nearly as clearly defined or stable. To build a Business Intelligence dashboard, you need a page design that is easy to understand, a dataset that contains all the information to visualize and some sort of framework to connect all parts. Users who build these dashboards are essentially designing and building small applications, which means they are acting as (pseudo) developers. Needless to say, there are a lot of ways a developer can organize all interacting elements. This makes the already difficult task of designing a GUI that gets out of the way and lets the builder build what he wants to build, basically impossible.
I understand that Power BI wasn’t designed to be used by software developers. But why can’t we have our cake and eat it too? I don’t think that’s unreasonable in this specific case, since I’m reasonably sure that under the hood, Power BI is essentially a framework for building interactive web pages that visualize data sets. Therefore, I’d like to propose the following solution. Let’s give the less tech savvy users a nice GUI, while giving the power users an “advanced” mode that lets them work the way they want to, preferably on regular text files to write code in, using their IDE of choice.
The inclusion of the option to build new visualizations using TypeScript, R or Python suggests that someone at Microsoft already had a similar idea, so let’s expand it. I want to define my tables, their relations and their transformations in a legitimate programming language, maybe using some sort of fusion of F# and SQL. DAX doesn’t count because writing it feels so rigid, it’s like jumping hurdles with your shoelaces tied together. And on a side note, the “Power” in “Power Query” is a joke. If you want me to build queries, let me write actual queries in SQL. It’s the industry standard. I also want some level of control over the HTML, CSS and JavaScript, so I can build my dashboard more like a regular web page. And while we’re at it, let’s add an option to save a project into separate files for each part of the project, instead of cramming everything into one PBIX file. That way we can get decent version control.
In conclusion, the invention of the GUI is one of the most important innovations of our modern time, but designing good ones is very difficult, even for simple tasks. This means that the less clearly defined and/or stable a task is, the harder it is to design a suitable GUI. So please don’t force the user to use a GUI for processes that are at the impossible end of that spectrum! And if you really need to have a GUI, don’t force it on people who don’t want or need it. Let us code.