Most of the stuff we’ve done here at Technically has focused on building applications for users: things like Twitter, Gmail, and Salesforce that people like us use most days. But a lot of code – potentially up to 30% of it – gets written for internal use cases, i.e. apps built by your teammates for your teammates. Those use cases span from basic tools like admin panels for updating your user information all the way to complex build tools for packaging your application before deployment.
Chances are you’ve probably used at least one of these tools in your day to day. So what different types of internal tools are there? And how do they get built?
Thanks to my former employer Retool for sponsoring this post! Retool helps teams build better internal tools faster with a drag and drop component editor, easy connections to your databases and APIs, and flexible access controls for companies of all sizes.
---
Let’s start with ol’ reliable: the admin panel#
Ah, the prototypical workhorse of internal tools: the admin panel.
The easiest way to think about the admin panel is as an internal interface to your production database. Recall that most applications are built from two important pieces:
- A frontend of HTML, CSS, and JavaScript that lays out the visual structure and interactivity of your app, and interfaces with the backend
- A backend comprising the database, API endpoints sitting in front of it, and any other data-related logic hidden from your users
That frontend is what you’re reading this post in right now if you’re on the web, and the backend is storing the content, your profile information, etc. Underneath it all lies a database, probably a relational one, storing and managing all of the data needed to run your app. It probably has a users table, a table that stores payment information, and a table for the canonical unit of your app (a tee shirt listing, a post on Substack, etc.).
The frontend for whatever app you’re using – be it Substack or Gmail – is designed around specific actions that users need to take. For Substack, those actions might be:
- Loading a post
- Subscribing to a newsletter
- Searching through a newsletter’s archive
- Changing your credit card information
These are the things you want your users to be able to do, and so the frontend / APIs of your app are designed to facilitate said things. Loading a post reads post data from the DB, subscribing to a newsletter writes a new row into the DB, etc.
In other words, your users need to interact with your database, but in very specific and limited ways. We don’t want them to be able to edit the information of other users, or see another user’s credit card info.
But that set of things that your users need to do is very different from what other teams at your company might need. Your customer support team needs to be able to refund orders, see a user’s order history, change their address, etc. In other words, they need to interface with the database in different ways than your users, and this is where admin panels come in.
An admin panel is an internal frontend that lets your team members interact with your app’s database, usually to accomplish operational tasks like refunding orders, fixing bugs, changing profile information, seeing up to date sales numbers, etc. Here’s an example of an admin panel that lets a support team view and search users and orders, add a new one to the database, and edit their information:
This is only accessible to internal team members, so you’d never be able to see or use this as a user of the app.
🧠 Jog your memory
Authentication is how you identify yourself to apps and software around the web. If you’re wondering how one might authenticate for an internal tool like this: it could either be gated behind username and password at a publicly accessible URL (e.g. adminpanel.substack.com), or could be hosted on a company’s internal servers inaccessible to the public, and you’d need to be on the company’s VPN to access it.
Pretty much every company in the universe has an admin panel like this if they’ve got users. At DigitalOcean we had a giant admin panel called Atlantis (everything was nautical themed) with literally thousands of actions you could take for each user (shut down their account, give them a discount, etc.).

