Ask HN: What is your biggest pet peeve in your development workflow?

15 points by sshamoon ↗ HN
I'm curious as to how the rest of the community feels about development workflow. For me personally, one major painpoint is enforcing coding standards across my team. Thankfully sites like CodeClimate and BitHound popped up to help with that.

What are your pet peeves?

21 comments

[ 1.9 ms ] story [ 49.0 ms ] thread
Two big things:

First, Use of legacy build systems (hodgepodge of different development environments and in-house tools). We don't need a custom migration tool, we don't need to badly reinvent make in batch files, and so on. I've been slowly grinding through and bringing sanity, but it's very annoying work and the "well it works fine once you're used to it" is a strong thing to overcome.

Second, developing on Windows instead of a 'nix-derived OS. For daily programming, I like having terminals with reasonable tools installed and ready to go, and Powershell just doesn't scratch that itch and neither does cygwin or git-bash. Honestly, this is what exacerbates gripe one: if we were on a proper OS, we wouldn't have to reinvent so much stuff anyways.

On the other hand, I'm dyslexic and I have a lot of trouble with CLIs.

My biggest pet peeve is that there are a lot of development technologies that have no GUI, or only a terrible half-complete GUI.

Currently I'm doing back-end development where I can get mostly everything done in Visual Studio, but whenever I have to interact with Git (which has several GUIs, all of which are either incomplete or intolerably slow) or the front-end guys (Bower/NPM/Grunt) I end up struggling in a console for waaay too long to get basic stuff done.

There seems to be this belief in the industry that it's ok if the interface is kind of rough and crappy as long as only developers are using it. Gripe if you want about Microsoft, but at least the vast majority of their tools have at least a decent GUI.

You seemed to type this post just fine--out of curiosity, did you do that aided with anything, or what sort of problems do you have with CLIs resulting from your dyslexia?

I prefer CLI tools during development because the tools tend to be simpler ("rougher") and easier to compose into pipelines. If you aren't using your tools this way, you're missing out on a lot of what makes them useful. They also are a lot easier to script and write documentation for...type this, type this, type this--okay, according to your shell history, you didn't type what we told you to and there's your problem.

GUI tools are useful for when I'm debugging graphical issues in the frontend (what is the DOM looking like starting under the cursor right now?), or need to very rapidly switch context in the backend (what are these variables set to? What is the prototype and doc for this function invocation?). They are annoying to script, and annoying to document for other developers. They also tend to be much larger and less composable than other tools.

As far as the git stuff, well, it's best used from the command-line.

I do ok with text, probably purely due to practice. (Playing MUDs, writing stories, etc.) I've learned what kind of things trip-me-up and carefully read everything twice before hitting submit.

To be perfectly honest, the main problem I have with CLIs is that there's no safety net, and a single typo could lose hours of work or loads of files. There's no Undo, there's no Recycle Bin (or Trash Can or whatever you want to call it). It's unforgiving and I make a lot of errors, and the combination of those two things is that I have zero confidence so I avoid them whenever possible.

I can't think of any development-related task I've ever need to do where it's helpful to "compose tools into pipelines", except building the solution which Visual Studio just kind of magically does for me.

And yes, obviously I know Git is best used from the CLI. I hope you realize how off-putting and discriminatory that feels to somebody like me... especially now that it's become a de-facto standard before it has a single reasonable GUI in Windows. I can't even imagine how a workplace adopting Git would feel to a person with a real physical disability.

So, on Windows, TortoiseGit isn't too bad. I like some of what the Github client does, but it gets confused sometimes and that terrifies me. For a while I maintained our in-house Git tool that enforced a particular workflow--a nice GUI that had buttons for particular work stages and checked to make sure the devs were following process. :)

That said, we kept getting nibbled by little issues the interfaces had glossed over, and eventually I just sat down with the team and started practicing and reiterating how to do what we did with git, and made sure our team's wiki had explicit reference instructions. They weren't really CLI folks, but within about a month they were all fine, and I cleaned up any messes they made and helped them gain confidence even after big oopsies (like deleting the master development branch on a weekend).

I think that if your development environment is more server-y ('nix, basically) you'd be getting more exposure and practice with composition of tools and CLI stuff. Don't give up!

I develop server apps all day. We don't use Unix servers, we use Windows servers. Which is great, because it means I can use C# which is one of the few programming languages available that actually has competent GUI tools.

Your post is misconstruing my point quite a bit. I don't want to learn CLI tools. (Why would I, when they're clearly inferior to GUI tools I already have? From my perspective.)

What I want is for developers of programming tools to be more aware of usability issues in their products, and to test their products with a wider audience of users. (It's obvious the authors of Git never thought for even a brief moment about usability or accessibility issues.)

Usability isn't just for mobile apps; all applications should have effort applied to make them as usable as possible to as many different kinds of users as possible.

These CLI tools are generally developed by and for * nix developers.

These developers generally prefer CLI tools for a bunch of reasons: their power, flexibility and ease of automation, integration and combination, standardized in/outputs, use over SSH and speed.

They prefer making CLI tools for all these reasons, and because it takes much, much less time to write a good CLI tool than to write a good GUI tool.

So, if you prefer hand-holding and mouse-holding, fine, use Microsoft products, they have something for almost everything you could need.

However, you can not expect developers, who work for free, to spend their free time to solve a problem they don't have, for a platform they don't use.

If you want these as GUI tools, why don't you build them yourself? No one is stopping you.

Edit: readability

> These CLI tools are generally developed by and for * nix developers.

Duh, I know that. But I'm not a Linux developer, I don't want to be a Linux developer, and I still have to use Git.

> They prefer making CLI tools for all these reasons, and because it takes much, much less time to write a good CLI tool than to write a good GUI tool.

Too lazy to make software properly; gotcha. They wrote about 1/3rd of a good source control program, then just kind of gave up, stopped, and called it "done".

> However, you can not expect developers, who work for free, to spend their free time to solve a problem they don't have, for a platform they don't use.

No; but I'd expect someone to do it. And it would be nice if open source developers actually felt a bit of guilt or remorse over how difficult their products are to use.

> If you want these as GUI tools, why don't you build them yourself? No one is stopping you.

I already have a job. My job is significantly more unpleasant because I have to work with Git. Volunteering my time to work with Git more is not appealing to me.

> To be perfectly honest, the main problem I have with CLIs is that there's no safety net, and a single typo could lose hours of work or loads of files. There's no Undo, there's no Recycle Bin (or Trash Can or whatever you want to call it).

Incidentally, there's no reason that that is inherently a feature of CLIs. There's no reason that "delete" really being "reversibly identify as pending delete pending a separate action" like the Recycle Bin workflow is tied to GUI vs. CLI except historical accident.

> Incidentally, there's no reason that that is inherently a feature of CLIs.

Correct.

The problem is cultural, not technological. And there seems to be zero interest in the open source world in fixing (or even improving!) their CLI environments.

What shortcomings have you experienced with SourceTree?
The UI is so low-quality I can barely stand it. It looks like someone just took the Git man page and said "let's make a button for every switch! That's our UI!" and plopped it down in the window. There was obviously no design or usability testing involved anywhere in the process. It practically requires familiarity with the CLI client before you can figure out how to do anything at all.

It frequently shows active buttons and menu items that don't actually do anything when pushed. So they can't do one of the most basic GUI operations correctly-- dim stuff that's not relevant.

Simple mistakes like the process for undoing the latest commit being to click the commit before it, then selecting "rewind to here" (or something; this is from memory.) Because God forbid you just let the user click the latest commit and choose "undo", they might discover that without having to Google it!

But what really prevents me from using it is how goddamned slow it is. Right-click a file, choose "Revert", and maybe the file will actually be reverted in 10-15 seconds. If you're lucky.

Check out SmartGit http://www.syntevo.com/smartgit/

I showed it to my boss, said "This is easier to use then cli, and faster", and he said "Pff, $80 bucks?". I had a license about 30 minutes later.

I'm curious why cygwin/msys isn't enough for you. I do a lot of development on windows, and as someone who primarily used linux for ~10 years it's 'good enough' for most of what I do.
When I'm working on multiple monitors/desktops and I switch to one and want to do some work there, but my 'active window' context is in previous spot where I was working!

I wish someone would invent some type of eye tracking that would intelligently assign the context to open windows on your screen(s).

In OS X could it be as easy as whatever monitor the dock you are using makes the app appear on that screen? I think that would be a better fit for me.
You could use a window manager that supports following (instead of clicking) the mouse or keyboard shortcuts to switch focus. Maybe I have been on the geek-road too long, but the latter should be supported in Windows/OS X as well, shouldn't it?
I'm part of the team that handles development for an excessively large business unit. Basically they meet up a few days of the week, argue extensively, and pass down the most ridiculous requests for us to complete. Essentially it means that no project ever gets finished, because everything is in constant rotation between back-burner and top priority. Even simple UI improvements have to be run up the chain of mid level executives who feel obligated to provide input. It kills morale, and leaves little room for innovation and actual improvement of our products.
That's why "it's better to ask forgiveness than permission" is so key working in that environment.

While you cannot do massive things and get away with it, you can get in a long of small fixes and improvements (which can add up) and just apologize if anyone notices.

If you had to ask permission for every tiny change it may take weeks and the ultimate decision would contain the kitchen sink anyway. Instead just do what has to be done and try not to get caught.

When a customer micro-manages me and does not listen to my advice I usually lose the interest in the project and just finish it to get paid. If I would be employed in such an environment I probably would not care to slip in improvements, because I would feel no sense of ownership in the project.
Syncing configuration files across environments, especially when they contain sensitive info. It's difficult and time-consuming to ensure that production configs are up to date when deploying new things. Super frustrating.