Thank You For That Pull Request, However

January 21 2015 Opinion Git

I think I’m going to have to pass on this one. Wait - WAIT! Don’t get mad, let me explain - I really do appreciate your time and what you’ve done. I think we’re simply not on the same page.

When you create an open source project it’s a bit like...

You get pulled in to a singular idea, something that you feel is so amazing, so needed and so fun to build that it takes hold of you and pulls you right into the landing bay.

The fact that you have shared a bit of this inspiration - that you have felt the same tractor beam as I have - that’s amazing! But I still can’t take your pull request.

Here’s why.

Polishing Vader’s Helmet

I see you’ve noticed that my code isn’t formatted the way you’re used to seeing it? My braces aren’t K&R, or maybe they are and it’s not to your liking. Perhaps I used/didn’t use semi-colons in my javascript or forgot to run Resharper over my source.

I can understand how it might irritate, how it sticks in your mind like the fact that Darth Vader’s helmet in Star Wars IV was in dire need of a Turtle Wax compared to his primly buffed, shiny as death cap in Return of the Jedi:

While interesting, it doesn’t really affect the plot. In other words your Pull Request is interesting and perhaps a fun thought exercise for when you and I go out for a beer someday: but it has zero impact on the project itself in the same way as Vader’s helmet-shine really won’t change his bad-assery in any of the films.

Moreover, this change can actually be destructive. When messing with braces and semicolons and other OCD formatting issues - especially those wrought by tools that play right into that OCD - you can easily introduce an OWHURTS error (Oh Whoops - Hey Ummm Resharper Tanked, Sorry).

I can’t see these changes clearly in your Pull Request because your reformating tool touched just about everything in the project, and this diff looks like really bad-tasting ice cream from Walmart. And I need to vet it, because these tools like to eat code, and this takes time. Too much time. But honestly: thank you for trying to help.

Fire’s In Space

You’ve noticed that not only is my grammar incorrect, but that I’m not following [FAVORITE PROGRAMMING PRINCIPLE] to the letter. It’s entirely possible that if I keep going down this path I could end up trying to Light Fires In Space:

This is a great discussion - thank you for bringing it up! Following principles in a reasonable manner will keep me from blocking myself into a dark corner where changing things in the future really hurts!

What would have been better is if you would have opened an issue first so we could discuss this, and a few other things too (I know fires can't burn in space, but hey, it sure looks cool!)

Like most things I build, I decided to see if this would even work before I bullet-proofed it with concepts and tied it up with a ruby-red bow. In short - it does work! And no one cares that I didn't use Dependency Injected, Single-y Responsible Cyclomatic Cohesion. But I know that in the future I very well will care - but that's in the future, right now is not the time.

If you would have taken the time to open an issue, I could have let you know what I was thinking and you and I could have had a great discussion about fun ways to move forward!

In fact I’ve already started working on many of your ideas in a separate branch here and I really would love to have your help - it’s just a shame that you spent so much time already!

Use On A Real World

You’ve done a code review for me and noticed that a few features are missing that would make this thing Enterprise Ready or maybe Useful In The Real World - in other words there are some things missing you would like to see added and so you offered a Pull Request for your edge case - thank you for doing that!

I’m not sure how that feature fits with the vision of the project - my vision with this project was pretty specific and I did my best to make it easy for you to extend and tweak as you need.

The thing is this: I extracted this project from a real-world need and I thought others might have that need too. That need was mine and it’s still mine, and so I’ll maintain, update, fix and love this project as we move forward. If I take on your need, then I’m going to have to support additional code that, frankly, I have no need for.

Again: thanks! It’s very nice of you to share what you think I might need.

Maybe Next Time Could We...

Contribution to an Open Source project is a great gift and I don’t take your Pull Request lightly. Next time it would really be helpful if you opened an issue first, pinged me on Twitter, or maybe sent me an email before you did all this work.

Code cleanup, good coding principles, and additional features are all things I’m very interested in - but I need to be involved in the process from the start because, at the end of the day, I’m the one who has to fix the bugs, who has to help others learn and understand this toolset, and who has to carry the love forward.