Musings on "Developer Mode"
Peruse this relevant meme. It depicts the magical transformation that occurs at the moment one taps the Android build number for the seventh and final time, as the arcane ritual transforms one from a chill dude in a business suit into that powerful, shadowy figure known only as "a developer".
It's a joke, obviously, but only half a joke. The "You are now a developer!" message that the developers at Google programmed your phone to display, when it grants you this set of powers that Google permitted them to program it to grant you, is doing something in the model of the world that its authors live in.
"Developer mode" isn't just for Android. The browser you are reading this in has a little panel you can open to inspect or adjust the content of the page. It's useful for things like composing humorous screenshots, deleting annoying ads, and downloading images and videos, but it's called the "Developer Tools", a set of tools defined not by what they do but by who they are intended or imagined to be doing it for. Discord has not only a "developer mode" that lets you get the permanent identifiers for messages, but also additional developer-exclusive functions that are activated by enabling the Electron developer tools and injecting code to set the isDeveloper
flag. Windows has a Developer Mode. ChatGPT ~got one for some reason~ has a popular jailbreak based around convincing it that it has one. This notion that a special class of people called "developers" exist, and that they must or should be afforded extra power in our society's digital spaces, is woven into the structure of the digital environment.
Why is it like this? Big Tech doesn't give any power for free. Is it something their labor force of developers demands to be able to grant to their counterparts outside the company? Is it a Ballmer-Doctorow gambit of courting programmers as potential business customers by temporarily empowering them, before they start putting up the prices on the code signing certificates? Is it to distract and mollify hackers, to keep them from seizing similar powers in a more destabilizing way?
Is there any truth to the notion that "developers", independent of whether or not they are currently testing or programming something, are a class with different needs and rights from normal humans?
I think I can clear it up pretty simply: Developers actually need and use a lot of tools you'll find in developer modes. There's no scam.
It also makes non developer but tech inclined people feel cool, and what's wrong with that? And it hides actions that most people don't want or need behind an extra step.
In short, it makes sense. The alternative, a separate version of applications with developer features, is clunky and inefficient. But I suppose you could suggest the same interpretations about classes and power there too. Personally I don't see it in either case.
Finally, in a tech world where giving users less choice and granular control is the norm, I think we should celebrate choice and control under any name.
Just to underline this even further: the major examples in the OP are operating systems and browsers (or electron apps, which are browsers with a false moustache and a name tag), which means they are places specifically designed to run other people’s code.
Devtools exist in Android and Chrome because I need to write code for Android and Chrome - and if they were harder to get at, fewer of us would target those platforms, they’d have fewer (or less polished) applications available, and they wouldn’t be as desirable to users.
I’d love to have a developer mode that let me go in and sort out some of the larger annoyances in other software I use, but they don’t exist because that software isn’t intended as an environment for other code to run in, and that means the companies making it have no incentive to open things up.
It's also worth pointing out that developer tools for propriety software almost certainly do exist, created by the developers of the software for their own use. It's just that there's no incentive to publish these tools when they're part of the company's 'secret sauce' unless you're aiming to build a platform where third-party developers can extend the software.
Respectfully, I think your unfamiliarity with the tools is leading you to some myopic conclusions about their usefulness.
The purpose of browser dev tools is decidedly not for "composing humorous screenshots, deleting annoying ads, and downloading images and videos." Those abilities are side effects that emerge from what they're actually designed to do, which is provide insight into the internal state of the browser engine. If they didn't exist, the people who build your favorites sites would be unable to fix many bugs in them. It's not a cool hacker trick, it's a necessary tool for web development. I say that as someone who spends most of my workday using these tools, without them I would be significantly limited in my ability to troubleshoot or create new features.
Electron apps have the same dev tools as Chrome because Electron is just a Chromium wrapper. I work with Electron and those dev tools are equally necessary in that context. I'm not an Android dev but I assume its tooling is also critical for those who are.
Funnily enough, the ChatGPT "dev mode" you mentioned is not actually that. It's just a prompt injection trick that makes the LLM pretend it's in some kind of dev mode. It's not really connected to anything, it's just an illusion.
Yeah I daily drive with the network tab open cause I feel like I cant see what I’m doing without it.
This post was a really weird point of view. Not bad, but weird in how like some people have really weird beliefs about modern medicine cause they dont really know how the human body works
Kinda neat to see this sort of content on here, amongst all the posts by developers haha
I'm also a person who uses browser dev tools professionally (although not as my main project). I know how they are useful for debugging while doing web development: you can fiddle with your styling until it looks exactly right, you can see what DOM you really have and what happened to your network request you were expecting, and so on.
What I'm aiming at is the seemingly commonly accepted notion that there is a kind of person called a "developer", who these tools are for, and that if you have to ask, as it were, that's not you. I produced examples of cases where browser dev tools would be useful for solving non-development problems in order to illustrate the pattern in the set of use cases that the browser makers are actually targeting.
Maybe this just reflects the shape of the world right now: the browser makers probably have telemetry showing that almost all dev tool use is during business hours, by people who use them a lot, on specifically localhost and one or two sites that presumably belong to their employer. They have measured and characterized a target audience that really does have its own coherent set of needs and arguably is typologically distinct from everyone else in the dataset, and they call them "developers".
But making and reinforcing this distinction is an important part of the politics of the artifacts here, and it is that politics I want to discuss. I didn't learn how to write a web page in a web developer training program, I learned how to write a web page from a little hardback children's book, read by flashlight in a linen closet, when the political possibility of an Internet built by just anybody was still alive. If you give that book to a kid today, do they meaningfully join the ranks of "developers", now that they have CSS-related problems? I think the question is silly and the categorical, identity-based thinking behind it, and behind the artifacts that suggest it, is unnecessarily restrictive.
I totally misread/didn't read the WikiHow article, but even ChatGPT seems to know what a "developer mode" would be like if it had one. I think that the fact that this is understood as a role people have (being a developer), and not a thing people do (developing something), is a political decision, and should be recognized as such.
Really, I think it comes down to reducing the number of things that could accidentally be triggered and confuse users.
For example, “Inspect Element” in the context menu could easily be misclicked and the inspector pane suddenly popping up and eating half the browser window could be quite the alarming experience — a lot of peoples’ thought in the situation is going to be, “oh no, did I break it?!” as panic sets in and they scramble to try to figure out how to make it go away.
I suspect that these features are put under the umbrella of “developer mode” simply because that’s the group who will by far be getting the most use out of these tools. I guess they could call it “Advanced mode” or something but that feels weirdly vague.
Yeah I’m imagining a random person activating the dev panel while making an expensive purchase or filling out a long form and thinking they need to exit the browser and start over.
I think you're overthinking it. A lot of those dev tools are just apps that use electron, and therefore have the chromium dev tools, because it's electron.
Browsers and OSes have developer modes because developer build applications against them. It's bad UI to expose it to "normal" users. No more, no less.
I think we could benefit from some overthinking here.
On one level, it seems perfectly natural not to bother the normal users with all these widgets and gizmos that they won't understand, can get them into trouble, and for which they probably can't formulate a thought that would constitute a problem that one of them could solve, lacking the right mental model of the system. Since the tools still need to exist for developers to develop, it's obvious there should be a setting to tell the program if you are a normal user or a developer.
But on the other hand, this is a decision someone made for it to be like this. Rather than designing a UI that can progressively expose the full power of the underlying system by progressively educating each user and leading them along a journey to mastery, which is hard, someone decided to build an "I am a member of a category of people who are responsible for their own education and whom you may legitimately confuse" switch instead.
That might be better UI when you consider a fixed group of people coming in with a fixed set of problems as new users, some of whom are developing stuff and most of whom are not, because it's nice and simple and still can handle advanced operations for people who already know they need them. But this UI is not effective at educating its users to bring them across that gap it creates; it relies on something else (a university degree, a "For Dummies" book, the plugin-authoring tutorial in the written documentation) to do that instead.
I don't think one approach is better than the other from internal principles of UI design: it is a political question of what you want the software to do to and for its users.
Here's an easy barometer to see that developer tools are what they say: they only exist on platforms where there are developers developing on them. Does FCP have a developer mode? No. Does Adobe Photoshop have a developer mode? No. Does the camera app on iPhones have a developer mode? No.
Developer tools are not "superior" features that only developers have access to. They're features that no one should have access to - they're are not inherently doing the job of the software (whether that be a browser or an OS) better. Sometimes you may be able to use a developer tool in such a way (like deleting an annoying element from the DOM of a browser), but that is coincidence.
That is not to say that apps don't have more features that they lock behind toggles. The iOS camera app does have that - it's not called developer mode.
Echoing others, it's about usability. A major aspect of usable interfaces is not being exposed to things (information or interactions) you're never going to care about. The things I use in developer mode aren't useful to most people, unless they're developers or idly curious.
Maybe "power user" mode is better. I don't think it's gate keeping (since anyone can access these modes, developer or not). I think it's just sparing people confusing user experiences with tools that often aren't polished, assume certain knowledge, can get you into trouble easily.
By the way, ChatGPT does not have a "developer mode". What that article describes is just a regular old jailbreak prompt that tried to trick the model into breaking the guidelines.
I thought that example output looked suspicious. I remember that news going around now, and this is obvious if I actually read the guide I linked for more than 10 seconds.
I think that's even more interesting, though. It doesn't have a developer mode, but the model can produce the flavor of one on demand.
It has already been pointed out that the developer tools are exactly that: tools for developers. Your post seems to be approaching this from the perspective of haves and have-nots, but I (as a developer, making me one of the "haves" in that model) don't see it that way.
Let's talk about the Android developer options. They're a bunch of very technical, device behaviour changing options, with a healthy dose of added security risks in there. These aren't "turn on Bluetooth" options, they're "how exactly do two Bluetooth devices negotiate a connection" options. Even I, a developer, don't need these for everyday device use. These are options that are used to test specific device configurations, a thing that a regular phone user does not need to do.
You mentioned browsers and the Discord desktop application (the latter is just a browser and the code for a web application tied up in a nice bow). The developer tools for the web exist because developers built the tools they needed to build websites (and later web applications), and now they're an expected part of the ecosystem and developers will stop testing against a browser that removes them. Opening up the panel to delete ads is not the purpose of these tools, the purpose of the Elements panel of the browser dev tools is to be a full editor for the content of a page. You can add, remove, modify, move, or copy any parts of the page because those are the tools that are useful. You can edit the looks of the page. You can pause the execution of JavaScript at any point to see what's happening. You can take a snapshot of the memory used by the browser to inspect it for memory leaks. You can record everything the browser is doing, from network requests, function calls, rendering timings, and more, because this information is useful when trying to build performant applications. The amazing part is that the browser dev tools are themselves built on web technologies, so there are browser extensions that add new functionality for specific use-cases (like particular libraries or frameworks).
It would be so easy for these tools to not exist or be locked behind some paywall. There could be a monetary divide between those who have the tools and those who don't. But there isn't, and we should be celebrating that. Professional tools, free and open, bundled with the software, only two clicks away. This is the easiest it's ever been. The gap between developers and non-developers is as close as it can possibly be. You might see it as a group of people being given extra power, but here you are given free reign with this same power. The opportunity to learn is being presented to you directly. The ladder has not been pulled up, in fact it's explicitly been put down, weighted, and reinforced. If you want to make this about class warfare, then I'm afraid you've got the wrong people.
Oh and as for that ChatGPT developer mode, that's just the LLM being instructed to output in a particular format. The model has some combination of dimensions that when given particular values corresponds to "things that look like what a developer would say" and it outputs text that looks like that. It doesn't have to be correct; LLMs don't know what correctness is, just what is statistically likely to come after what has come before. I wouldn't put too much stock into LLM jailbreaks or weird output formats as some indicator of hidden functionality.
Developer mode is the same thing as a debug mode or an expert mode or an advanced mode, which is what they're called in various other programs. They're features that most users don't need or want, but are useful for troubleshooting issues that only a developer really has the power to fix. If a site is rendering style incorrectly, the developer tools will help a developer identify that and fix it. If an app is causing a memory leak, the developer tools can help identify that. The fact that these tools can be used by normal users in some case to gain some desired functionality is a side effect, not the main feature. For most people, these tools are useless, confusion, and potentially dangerous, so it makes sense to hide them behind an additional step.
It's not part of a conspiracy about classes or anything, and it's not just big tech. It's a very standard paradigm across the technology field.
I love this idea--or rather that you would come to this conclusion--but the simple truth is that people don't like buttons that break things. I would say that the practice of hiding settings behind an "Advanced Settings" toggle is even more ubiquitous.
I don't think I would qualify "developers" as a class of people. Literally anyone can be a developer, and doing as little as opening the inspect tool in your browser to mess with some text on the page is a common first step to becoming one. A class or caste system implies that such mobility is difficult or impossible, and not predicated entirely on a single personal choice.
These features are hidden by default for two main reasons:
Sounds a lot cooler than "safe mode" when trying to diagnose a Windows problem, although use cases are different, for these hidden super secret modes.
I feel it conveys everything I need to know when I need to figure out where the advanced features are, I think maybe "power user mode" could have been an alternate name. It sounds as cool, but may not turn on all of the features you'd expect in other OSs.
Firefox has a Developer Edition which is actually the beta version.
The major difference is that the normal version of Firefox do not run extensions not signed by Mozilla. There is no "developer mode" - even if you go to about:config and disable it it does nothing. Presumably, this is due to how prevalent spyware installers in the past used to inject browser addons that add ads/toolbars to browser in early 2000 and now become extinct after browsers starting to block them and Chrome never supported toolbars. Some "antivirus" also injected browser extensions to do various things like adding trust meters to search engine result.
Maybe you're wondering why the Android team decided it needed to be so difficult to turn on developer mode? It's not discoverable; you need to have read something somewhere that tells you how to do it. I found it to be a rather surprising procedure the first time I did it.
I imagine it's to discourage scams. If someone tells a non-technical user to turn on developer mode, then the procedure to turn it on so weird that maybe they'll get suspicious: why am I being told to do this obscure procedure? It will be harder to convince them to do something dangerous using a developer feature.
Similarly, for a browser, there are scams where someone tells the user to go to a sensitive website and cut and paste JavaScript into the the dev console. On some websites (I've forgotten which ones) they will print a message to the console telling people that if someone told them to go there that it's a scam.
Protecting the masses from getting scammed isn't easy. These speed bumps make scams a bit harder to pull off.
Companies that have hundreds of millions of non-technical users have to worry about things like this.
I'm an android developer.... my phones are always in developer mode lol. I turn it on so I can connect my phone to android studio and get logcat output. Sometimes I use some of the extra settings (like showing layout bounds, or having activities die immediately) to produce or track down bugs. Honestly didn't realize it was so interesting.
TBH I don't use most of them, ever. If you want to break a fuck-ton of apps, turn on "Don't keep activities" lol. I don't actually recommend this for real-life use. It just means that your apps won't stay alive in the background ever, forcing developers to recover appropriately.
That latter paragraph is decent advice for devs. Some manufacturer Android skins kill background activities pretty aggressively (enough to make iOS background app management look lax in comparison) and can be a common source of weird bugs if the device(s) you primarily test against aren’t using one of said skins.