Ask HN: What developer tools would you like to see?

131 points by avg_dev ↗ HN
My passion is writing developer tools. I like the feedback you get and the way it shapes the work.

It's cool when you can build software and someone runs it on their own data just a short while later and has a direct line of communication to you, providing a tight feedback loop.

I quit my job a few months ago and in a few months I'll have to find a new one. I thought I'd see if anybody had any ideas for tools they wanted to see written that lined up with my interests and that I could try my hand at, to see if I could make a go of working on dev tools for myself before going back into the job market.

229 comments

[ 3.7 ms ] story [ 254 ms ] thread
WebObjects but you only need a browser.
Log viewer that can prettify JSON structured objects. And for example if you clicked on level = error it can quickly filter all error logs.
CloudWatch is basically that.
I'm pretty sure you can do this with Kibana as well.
While others are replying with ‘this or that already does this’, I totally feel you. All the log viewers I’ve worked with (latest ones being DataSet and Kibana) have some holes in their UX. When that compounds with badly configured log pipeline it’s really painful.
I think I have a prototype you might be interested in, but I´d like to manage expectations first :)

  - It isn´t finished
  - The code is a mess (and not available online)
  - The UX clearly needs work 
  - etc. etc. :)
...but I started a thing with basically exactly the same gripes as you two. The only difference: Actually, I don't think collapsing JSON is nearly enough. I want pretty printers (like in GDB) I can rewrite on the fly.

So, if you're willing to plunge head-first into cold water without proper documentation, have a look at: https://run.pickaroon.app

Keep in mind that I wrote this to scratch my own itch and will change it further as time allows. On the upside, I've been using it for my own dives through logs quite successfully already.

I also started a manual-ish readme that also isn´t public yet. It's written in markdown, so I'll have to look into how easy I can throw it onto my server or not. I might just make a separate GitHub repo for the time being.

Edit: I went with the GitHub route. You can find the current iteration of the readme here: https://pickaroon.github.io/readme/

> I want pretty printers (like in GDB) I can rewrite on the fly.

This hits very close! Will have a look at this for sure, thanks.

For my tiny projects, I analyze my JSON logs with:

- jq

- Google Sheets (after conversion to CSV)

- Beekeeper Studio (after conversion to SQLite)

This won't scale to large projects, but it works well for the logs from my little CLI tools I enjoy writing in my spare time.

I wrote about this (with some screenshots) at https://github.com/bbkane/logos#analyze-as-json

The Logfile Navigator is a TUI for viewing/analyzing log files and will pretty-print anything with a keypress, see https://lnav.org/features#pretty-print-view

It's not specific to JSON/XML either, it works on any text that follows the usual conventions for structuring data in a textual way.

You can filter by level as well, but, usually I just press e/E to jump to the next/previous error from the current location.

There are, of course, many other features as well.

Make a faster Swift compiler. Way faster.
I don't know if this exists or not, but it's something I've always wanted.

I love and hate unit testing. It's a fantastic idea that I've never seen successfully implemented in practice, mostly because the tests invariably fall by the wayside. At the very least, it's a burden to support them.

I'd love a tool that would observe my code during runtime - capturing all inputs and outputs from every function, as well as the value of each variable at each point in the execution flow. Because this would probably incur a performance hit, I'd want to have the option to toggle it on/off.

After execution, I can scroll through a list of called functions and decide which ones I want to save. Once I choose to save, the tool generates a unit test for the selected function. Since the tool is capturing I/O of all functions, it could retroactively mock each call within the function.

This would only be useful for deterministic functions, of course, and it would still be up to devs to document why the expected results are what they are. But my goodness it would be a time saver - one click unit tests. Yes please.

Not sure this would be great for new code, because the tests are supposed to dictate the function’s behaviour, and not the other way around.

Yet, this would be amazing for legacy projects with no unit tests: you could record the code in production, and generate unit tests from there, and add them to the non-tested project.

It would bring you a safety net allowing you to better work on that legacy project IMO.

This actually reminds me a an attempt at an internal tool I saw pass by whose goal was to save all IO for a given request (aka db call, log calls, network request, file read) for a given backend, and allow you to replay those locally for testing purposes independently from the language used by the backend. I think this didn’t lead anywhere, because it was harder than expected, some things couldn’t be recorded easily (like RNG use), and it also meant finding a way to have all IO libs use the precomputed values.

Very true, yes. Much more useful for existing code. Although I don't think unit tests and TDD necessarily need to be aligned, the red-green-refactor flow could potentially be re-imagined with a tool like this.
One thing I found useful with Trompeloeil was the tracer. You instantiate a tracer, and then every call made into a mocked object is logged for you. Really make it easy to see how a mysterious controller operates on the thing you are mocking.

Plus, the very act of engineering in a dependency injection for the mock if not already provided, enforces a testable interface.

This sounds like fuzzing. Do you want fuzzing?
I believe a key component of fuzz testing is randomized input. I’m talking about recording live usage of an application and capturing the observed I/O. Like Playwright, mentioned above, but applied to unit testing rather than E2E.
It's not a key component, in fact a lot of fuzzers do intelligent input culling and whatnot based on static analysis.
I'd love a tool that would observe my code during runtime - capturing all inputs and outputs from every function, as well as the value of each variable at each point in the execution flow, and the call graph. Because this would probably incur a performance hit, I'd want to have the option to toggle it on/off.

After execution, I can scroll through a tree of called functions and convert it into permanent "implementation documentation" (saved in a document I can annotate eg. with data flow, and edited when the code itself changes), helping me understand both the structure and dynamic control flow of code I'm learning or relearning after months of absence. I currently do this manually in Google Doc bullets, in order to make sense of legacy code whose control flow is fragmented into many function calls I must piece together mentally (as described in http://number-none.com/blow/john_carmack_on_inlined_code.htm...), and as a starting point for restructuring types and function graphs.

There's a gem for Ruby that does a limited version of this: https://github.com/testdouble/suture

Suture is geared towards refactoring, so it doesn't do it for every function at once, and instead you have to specify methods manually.

It doesn't check all your boxes, but have you tried Playwright?

https://playwright.dev

I've looked at Playwright and it seems to be very close to what I want, but it's on the E2E side. I'm looking more for a unit testing variant of that idea.
> I love and hate unit testing. It's a fantastic idea that I've never seen successfully implemented in practice, mostly because the tests invariably fall by the wayside. At the very least, it's a burden to support them.

Are you using object-oriented programming or a more functional style? Without classes, unit tests become a lot more readable and manageable.

So much this, both in the tested code and in the test code itself. I only started unit testing in Python once I discovered pytest; the built-in unit test framework was such a cognitive mismatch for my usual coding style.
Always functional; I'd never try to implement unit testing with classes, that sounds like a nightmare. I'm not talking about the difficulties of writing a unit test, which is where the oop/functional divide is important. I'm talking about the increased time to market, the difficulties of maintaining tests over time, the need to have everyone on the team be equally committed to tdd, etc etc. These are the things that kill good testing practices.
A tool similar to what you want. It generates input/output pairs from the code, aiming to maximize coverage, and allows you to convert them to unit tests with one click.

https://docs.microsoft.com/en-us/visualstudio/test/generate-...

Also known as its legacy / research project name, "Pex". The underlying algorithm technique is called "dynamic symbolic execution".

There was also similar tool for Java called "Agitar Agitator".

> I'd love a tool that would observe my code during runtime - capturing all inputs and outputs from every function, as well as the value of each variable at each point in the execution flow. Because this would probably incur a performance hit, I'd want to have the option to toggle it on/off.

There's a class of integration tests dubbed consistency tests, which tracks the output that an interface provides give a specific input in production, and the test consists of playing back a sample of said production traffic to verify if the service remains consistent before promoting/dialing it up in production.

This class of integration tests is also used in UI tests, and Selenium provides explicit support for them.

https://elementalselenium.com/tips/62-web-consistency-testin...

Ah very nice, that sounds close to what I'm imagining. Will check it out, thanks.
also perhaps note worthy: "instrumentation", which I guess is a part of it at least. very useful tool.
Yeah I want this too. Jest Snapshots are great for quickly saving the expected output and asserting that it doesn’t deviate, but it would be nice to have the same sort of “snapshot” of inputs as well.
I don’t have any great ideas. A big one for me would be ‘better/much faster language server for the language I use’ but that’s a lot of work.

But if you like working on developer tools, the best way to do it is to find a sufficiently large company that care’s sufficiently much about developer tools that they will be willing to pay you to work on in-house developer tools. This can be much more stable than trying to sell developer tools yourself (hard to find a tool with market appeal and hard to sell it) and you get to easily talk with your users and understand what they actually want. People are also much more tolerant of teething problems with internal software than with external software.

Do you have any tips on how to find such companies? I've always wanted to work on developer tooling but only ever found one company willing to invest in that.
Any big tech company will invest in developer tooling. E.g. Google has tens of thousands of software engineers. They have internal build systems, internal source control, internal code review, internal code search, and so on. Facebook is similar. Microsoft make and sometimes sell developer tools to be used outside their company.
I just want Xcode, but less buggy.

A lot less buggy.

Sheesh.

lol yes. Really, I just want an XCode without all the cruft of an IDE. Like what VSCode is to VS.
Well, I like a lot of that "cruft." Things like Storyboard Editor, autocomplete, DocC, Instruments, etc.

But is is crazy buggy. It's also YUGE. It's only exceeded in size, by games.

You could try AppCode (personally I ended up preferring Xcode despite all its pain points, I can’t really get on with Jetbrains tools, but YMMV!)
I tried it. It was too much like Eclipse, for me (I am not an Eclipse fan). But I know a lot of folks that like it.
So much this! And faster. Why does single stepping take visible seconds and cause visible redraws of all the panes in the debugger? WTF? It wasn’t this slow when we had 25MHz CPUs running GUIs, why is it so slow now? (Yeah, systems are more complicated, but they’re also a hell of a lot faster and have more CPUs to distribute the work around!)

Also could we get documentation on things like Instruments? I don’t just mean stuff like “this button opens the whatever pane.” I mean how do you use it and what does its output mean? I’ve rarely seen such useless documentation. (Well, Unix man pages, I guess.)

Dunno dog. I'm a developer. If a tool is missing then I just build it for myself. I'm happy with this arrangement.
a better remote application debugging tool. and a better way to debug and track a serverless applicaiton
I think we all agree that we want faster horses.
And that would be meaningful feedback when we talk about cyborg hourses that OP can try making it faster unlike horses as a species.
I believe my point was that asking users is… tricky.
I think we all agree that we want ways to crank out React faster.
A proper TypeScript debugger for React Native + Vscode that fully supports async, stepping in TS (instead of falling back to .bundle files randomly), breakpoints (instead of randomly deciding not to break) and sagas (generator functions).

A fully integrated Vscode extension that can "time travel" the app state (just like React Native Debugger standalone app does, but for the whole app not just redux).

Visual way to debug/replay/disable/change speed of animations that are applied on objects, with animation values and dependencies also listed with their realtime values (perhaps that could be progressed with a slider).

Visual way to display fragment shaders on an image/3D model, at a pane.

Just a few that came to my mind.

Remember the early web, when people used to look at existing websites to learn how it was done?

“View Source” used to be a career-starter for a lot of people, but has become largely useless today due to transpilation, frameworks, and other abstraction layers.

I’d love to see a browser extension provide an “Explain Source” context menu item, which sends you to a pane in Developer Tools that shows:

- an estimation which frameworks the page is likely using (a little like the bar chart that GitHub shows for languages);

- a list of dependencies that the website is likely pulling in, with links to their respective homepage and GitHub page;

- their version number(s), if detectable;

- language(s) in which the website was likely written; and

- a small internal API so people can contribute recognition rules for more frameworks and libraries via pull request.

The target demographic would be students of all ages (starting at elementary school), and other people who’d love to learn about web development but don’t quite know where to start.

And who knows, bringing back that explorative, hands-on philosophy may well help a single person get into web development – maybe on the other side of the planet? – and I believe that’d already be worth the effort.

That would be great. You could also recommend extensions to be installed if a website uses a certain framework. For example, the react Dev tools extension can be used to view the source of react apps in a more intuitive way compared to the rendered html file.
builtwith.com?
A bit like that. But for web dev, not sales intelligence.

And, most importantly: fully offline (so you can be sure nobody learns about the sites you visit).

Not sure what you mean by sales intelligence; builtwith shows frameworks, web server tech, etc.
Ah ok, I stand corrected. Looks like I’ve been misled by their pitch, which focuses heavily on the recon-for-more-leads aspect.
There is https://www.wappalyzer.com/ which does most of what you are looking for.
I use the wappalyzer chrome extension almost everyday when I'm browsing the web, pretty useful at getting a highlevel view of the tech used
Thanks! That’s exactly what I was looking for. It’s even local (data stays in the browser) and free software.
This would be brilliant!

One (lengthy) nitpick based on a word you used:

> estimation

From that, my guess is that you're implying that because of the spaghetti-pile of bundled JavaScript, CSS and HTML that we have nowadays that it's not possible to use predictable, well-defined standards to make this information available to users.

And you're probably right, it's a mess!

But I would suggest that we try hard to figure out better ways to make the technology simple again, and move towards those, rather than building a complex guess-the-technologies layer on top.

Ideas towards that:

- Move (standardized) package metadata into JavaScript modules themselves so that the data can be inspected and surfaced at runtime (status: I'm not aware of this being standardized, but it may be)

- Improve the ability and mechanisms available to import JavaScript modules (status: this is happening gradually)

- Remove the requirement for applications to perform any bundling at all (status: there's recognized frustration and maintenance burden regarding bundling, but I haven't yet seen no-bundling solutions arising)

- Reduce the need for minimization of content served over-the-wire on the web (status: debatable -- it's probably still required for now, because particularly JavaScript, even after compression, can be fairly large and may still be served in low-bandwidth environments)

A key benefit of this "re-simplify the web" approach would be that as well as enabling the explorative, hands-on approach you suggest, it should also make the learning curve easier for the resulting newcomers.

Not only explain the source, but also format and present it in a nicer way.

Many websites’ code now are minified so I have to copy and paste it around then manually clean it up before I can start reading it.

My experience is; view-source gives the downloaded html (&css &js). It will show a js function which adds some html elements to dom. So for example view-source migjt never show a specific div with text. I usually go by inspect element, because that shows that shows whats rendered, what we actually see on dom.
also to add stackshare.io

and I'd love to see this for git repos. like "what-is" command that explains what is in a repo based on files structure and content, what modules and glues are involved. it's impossible to keep up with dependencies these days, especially for someone like me who doesn't code in the freshest stacks on the regular...

Another couple of tools that are useful for analysing apps/products that heavily utilise js.

- webpack bundle analyser

Use it to determine what’s in the bundle. Can give you insight into tools, APIs and other dependencies.

- shuji

Used to decompile minified js. Effectively you can read the bundle, see the directory structure. Perfect tool for learning.

[1] https://openbase.com/js/webpack-bundle-analyzer

[2] https://openbase.com/js/shuji

> when people used to look at existing websites to learn how it was done?

I actually forgot we used to do this. I miss the early web.

Some kind of vulnerability tracker for dependencies. You type `gradle somecommand` and it will walk the dependency graph, incl all transient ones, and show you which dependencies currently have an active vulnerability affecting them and the version that fixes it.
snyk does exactly this. You can also integrate it with bitbucket so automatically make PRs with upgraded package versions.
Find a way with entr[0] and an http server to tell the browser to reload the currently viewed file if it changes.

Today, entr allows you to restart a command when a file changes.

A web server allows you to serve local files to your browser.

If you use npm, lots of libs allow you to serve your web ui, and make the browser reload the page when something has changed.

But this is tied to npm, and even to the framework you use (eg: angular has its own way).

It would be cool if we could have a way to do that for any tool/language. Like, could a tool tell the browser to reload, because that tool was restarted by entr due to a file change?

This would allow live preview on any kind of files, or maybe even program output in the browser without having to press F5 every time.

[0]: https://github.com/clibs/entr

(comment deleted)
many projects allow web reload, see python httpwatcher for example.
TypeScript stuff:

1. A tool for debugging TypeScript (in VSCode) that shows the provided and expected types, and how they are different, in a way that is easy to read.

Instead of having a bunch of nested paragraphs in plain text, show it in two columns, each displaying how a normal person would write a type declaration. Maybe even use color (highlighting?) to show which parts are different.

2. A tool for VSCode that lets you expand (into a modal or whatever) types that are abbreviated when you hover them

For #2 you can hold CTRL when hovering over a type to expand the type definition. If you hold CTRL+click it will go to the definition.
- A build system / package manager like Nix [1] but with a better user experience / more straightforward command-line tooling.

- A dependently typed programming language like Coq [2] (or Agda, Idris, Lean, etc.) that is sufficiently approachable to gain enough mindshare that companies start adopting it for mission-critical work.

- A version control system which scales to petabytes or more. Something that I could put large video files in without thinking twice about it. Something a large company could use for their monorepo—or even their data warehouse.

- A note-taking tool that allows me to organize notes in a graph with links between them (like a wiki), not as files and folders in a tree, which enforces the invariant that every note is transitively reachable from some "root" (by following links) so I never lose a note.

- Something like Toast [3] but which is also designed for running services in production, not just local development and continuous integration. A unified way to run code in dev, test, and prod environments. A new k8s.

[1] https://nixos.org/

[2] https://coq.inria.fr/

[3] https://github.com/stepchowfun/toast (shameless plug)

> - A build system / package manager like Nix [1] but with a better user experience / more straightforward command-line tooling.

Working on it :)

> - A version control system which scales to petabytes or more. Something that I could put large video files in without thinking twice about it. Something a large company could use for their monorepo—or even their data warehouse.

https://github.com/facebookexperimental/eden

> A note-taking tool that allows me to organize notes in a graph with links between them

https://www.orgroam.com/

> Working on it :)

I look forward to checking it out when it's ready!

> - A note-taking tool that allows me to organize notes in a graph with links between them (like a wiki), not as files and folders in a tree, which enforces the invariant that every note is transitively reachable from some "root" (by following links) so I never lose a note.

There is a class of note taking apps that's becoming increasingly popular (at least I perceive it that way) that does this. They store notes in local Markdown files, and when you link between pages, they can build and render a graph based on them. For example:

- Obsidian: https://obsidian.md/

- Logseq: https://logseq.com/

- Joplin: https://joplinapp.org/ (not sure if it's built-in, but there's a plugin: https://github.com/treymo/joplin-link-graph)

> - A build system / package manager like Nix [1] but with a better user experience / more straightforward command-line tooling.

Have you tried Bazel? It has warts but has been improving for a long time.

Whats awesome about nix? I struggle to grasp why is better than docker
> A version control system which scales to petabytes or more

Git Annex might work here

- Language agnostic unit test framework

- A polished window manager (e.g., Yabai) written using Hammerspoon modules

- Hudson (Jenkins) replacement (self-hosted) written in typed Python

Make web development experience in 2023 like desktop development experience in 1998.
Can you elaborate on that? I'm a bit young to have done desktop development in 1998. What aspects of it do you miss?
I’d like to see RAD tools, WYSIWYG editors (that don’t generate awful code), one-click build/deploy without any yaml. I feel like the big cloud providers are really under-invested in this area.
I would love an IDE where I can create documentation formatted as tables, colors, graphics etc. directly in the source code comments.

Also, I would like to show selected function or variable names in bold or larger fonts.

Viz. Knuth Warp/Weft.

This would be awesome! I can’t stand ASCII art. I can rarely tell what they’re trying to draw and it looks awful.
Yes! Rendered markdown comments - especially with mermaid or equivalent diagram support and the ability to link to functions/classes/etc - directly in the IDE would be amazing!
Lazydocs and mkdocs can take python docstrings and renders markdown into a documentation website. Given it's just a sphinc website, you could probably then also add plugins for mermaid, plantuml, etc.
I would love to see tools in these categories:

- Sets constraints on how we write code - like a combination of a powerful linter and templates or patterns.

- Visualizes code-base and flow of code - quickly navigate to the relevant code as well as show the available functions in the code-base so newly onboarded devs can more easily re-use code than write new functions.

- Press record to capture 3rd-party requests and store as json mocks to use with a Mock Service Worker (msw)

Anything that improves the feedback loop, visualizes code-base, reduces context-switching or simplifies flow of code.

Storybook keeps impressing me. It's often misunderstood as a documentation tool but it's more than that. It let's you:

- develop components in isolation, greatly improving the feedback loop and sets constraints on what the component takes in as props and what it renders.

- testing for visual, accessability, interactions etc.

For templates and patterns, we started Codiga [1] where you can define smart code snippets [2] that depends on your environment and can be parameterized by the user when being inserted.

We have a collection of existing snippets user can already use in their IDE on the Codiga Hub [3]. Developers can define their own snippets and share them with their team.

We are still developing the product. It works with IntelliJ and VS Code and we have already a lot of users on the platform. Would love to hear your feedback!

[1] https://www.codiga.io [2] https://www.codiga.io/code-snippets/smart-code-snippets/ [3] https://app.codiga.io/hub

Intellij Ultimate does the first two already. You can create new inspections using structured search and then mark any matches as errors. I've done this to make usage of one or two awkward APIs safer. Or you can quickly write a bit of new inspection logic if your inspection can't be expressed using a structured search. Those can be stored in tree.

It also has a pretty powerful diagramming tool.

Can you elaborate on "reduces context-switching"? I am working on something around that, but it can mean different things based on context.
Im building dstack [1], a tool for continuous training ML models in the cloud. And I’m looking for a co-founder! Happy to chat if you are interested.

[1] https://dstack.ai

What capabilities should your cofounder have?
Ideally, experience of building or selling tools to developers. Understanding of MLOps scene would be a bonus. Desire to build great tools!
I'd find it nice to have a VS Code plugin to hide assertions. Specifically in Python, I see myself writing asserts to check for data boundaries, numpy array sizes, data types.

It takes space and diatracts a bit.

Bonus points if I could have a, for example "# /assertion_func" comment that would label a whole function to be folded together with asserts.

At times, I have wanted a text editor that uses a "scroll and zoom" interface for navigating a single, long file. The minimap idea is similar, but I want it fully integrated into the main view.

I'm not sure how useful this would be, but I'd like to try it.

I love that idea, some kind of Google maps for code where (0,0) is your main would take out a lot of pain when onboarding into large and poorly documented codebases.
Yeah, that is exactly the situation I was in when I really wanted it.
TL;DR: highlight tailwind / bootstrap classes in VS Code.

Web Dev is only a distant area of expertise of mine. I find learning new things here not complicated, but a bit tedious.

What I'd like is to be able to scan through html files faster. And what hinders me the most, in terms of reading others' code now, is figuring which html classes are custom-declared, and which belong to a design framework, like bootstrap or tailwind.

Being able to tell at skim-speed would be awesome.

You can use the Tailwind CSS IntelliSense VSCode extension for this.