Squash
squash.io
squash.io
Where I work, teams of developers are responsible for products -- we all own the quality and robustness of our product's code. If the application is broken, why would you only email the person or pair who wrote the particular line of code that excepted? Am I supposed to pretend broken code is not my problem unless I personally wrote it?
Development is a collaborative activity. If a product is broken, the whole team needs to know, so the whole team can fix it.
Fixing a bug early in development is my problem. Fixing a bug in production is all of our problem. I think Squash encourages the former in order to mitigate the latter.
1. Whoever touched a line of code last is most familiar with that line of code. I just moved a method to a different module, so following this assumption I am now the person most familiar with every line contained in that method.
2. The line of code triggering the exception is actually at fault. I just changed a value in a configuration file and it triggered an exception off in some code that creates a network connection - code I've never touched.
How faulty these assumptions are probably varies pretty wildly from organization to organization.
In your second: If you changed a value in a configuration file and it triggered an exception somewhere, many people would say you are at fault for not testing your change.
Most places I've worked there's a simple rule: whoever last touched the code that broke is responsible for getting it fixed. That isn't meant to be taken literally in that I must actually make the code change myself. It means that it can be assumed that if I'm touching some code, I'd better be familiar with the code I'm touching. If that means I delegate the fix to the original author, then great: It's still getting fixed. If I can delegate to someone who's better suited to make the code change, that's OK too. If not, I make the fix. In any case, If I'm changing a line of code, you can assume that I'll know what action to take if that change breaks something. If I don't, I shouldn't be allowed to make the change in the first place.
Exactly. However, the exception will likely be thrown from somewhere in the network stack, not from a config file, so whoever last modified the error checking code in the network stack will get an email instead.
- If the bug is a regression it may stem from the author's misunderstanding of the codebase. By being the one to fix the bug they have a chance to learn correctly how it works and reduce future mistakes.
- The original author of the bug was just in the code and can likely most efficiently fix it since they are recently familiar.
- It would be wasteful to have two people working on the bug at the same time (though bug policy can also help with this).
- On a large project there can be lots of noise which does not affect you, especially if the project is well compartmentalized.
- Taking responsibility is always a good thing!
It is only toxic when people start pointing fingers and shifting blame instead of helping out. As a "component owner," I personally like to fix my own mistakes so I can learn from them.
This should give you the contextual advantage first, and then collaborative advantage very soon after.
https://github.com/SquareSquash/web/blob/master/config/initi...
More broadly, if you're writing an open source rails app please don't commit a hard-coded secret_token into the repo or session fixation attacks are trivial.
Seems like a sane default would be to have a special token (used in the auto-gened config) that generates a new random key, and then writes it to a 2nd config file (which is in the default gitignore)
The handling for OS applications is a little more difficult and I must admit that I know a couple of mediocre and no good solution to it.
There is talk about more general solutions here:
https://groups.google.com/d/msg/rubyonrails-core/N2EFnf6X_i4...
Btw: you can check the regenerated file into the repo, adding it to .gitignore just prevents you from accidentally adding it:
Last login: Tue Jan 15 17:07:14 on ttys005
Voice-of-Evening:~ fgilcher$ cd /tmp
Voice-of-Evening:tmp fgilcher$ git init test
Initialized empty Git repository in /private/tmp/test/.git/
Voice-of-Evening:tmp fgilcher$ cd test/
Voice-of-Evening:test fgilcher$ echo "README" >> .gitignore
Voice-of-Evening:test fgilcher$ touch README
Voice-of-Evening:test fgilcher$ git status
# On branch master
#
# Initial commit
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# .gitignore
nothing added to commit but untracked files present (use "git add" to track)
Voice-of-Evening:test fgilcher$ git add -f README
Voice-of-Evening:test fgilcher$ git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
# (use "git rm --cached <file>..." to unstage)
#
# new file: README
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# .gitignore
Voice-of-Evening:test fgilcher$Also, just because something needs to be "stable across deploys" doesn't mean it needs to be in VCS. Are your application's third party passwords and API keys all stored in its version history? We picked a solution where the deployment tool configures the sensitive pieces of the application.
To answer your second question: depending on the case, I store 3rd party passwords and API-keys in the repo. If an employee leaves the company I'll have to change those anyways since he probably had access if he had access to the project at all.
Fewer e-mails sounds good, but it doesn't mean much to me if I don't know what the product is.
It's definitely one of those simple "why didn't I think of that?!?" type ideas. Well done to the team responsible.
They should have a once sentence description involving exceptions under "Say hello to Squash."
For example, when a user encounters an exception you get notified about it while at the same time squash gives you a nice interface to view how many times the error occurred, where in the code it occurred, etc.
"Hello, I'm Tim Morgan and I'm going to help you get started using Squash, the open source exception reporting tool that's better than what you're currently using. Plus, it's free."
It looks like a tool that can automatically track bugs and notify specific developers whenever exceptions in your project come up.
"Squash is a collection of tools that help engineers find and kill bugs in their code."
> ...analyzes the stack trace of every exception, and determines which line in the backtrace is the source of the bug.... uses git to figure out who might have caused the bug... shows you where in the code the problem was, so you can quickly get to fixing it...
So, it's an exception logger that integrates with your version control system and `git blame`.
> ...sends an email to the engineer at fault...
It emails someone when it figures out they were responsible for an exception.
> ...If the engineer sits on the email, eventually it escalates...
It messages the rest of the team if the bug doesn't get fixed.
> ...Dig inside the values of environment variables, instance variables, request parameters, and more... analyze information about a bug to determine its root cause... symbolicates iOS crashes, un-minifies JavaScript code, and de-obfuscates Java code...
It tracks data about your application, and captures state useful in digging into the cause of a bug.
> ...full-featured commenting system, ticket-management system similar to JIRA, and a news feed... PagerDuty and JIRA integration...
It has collaboration features and integration with various existing development tools.
Interesting FAQ full of the developer preemptively defending design decisions.
The Ruby support in Sentry currently isn't quite as good as the Python support, but it's not bad at all, and constantly improving.
Questionnable assumption, to say the least.
Still, not a bad idea. You could also send a file to the people who contributed most of the culprit file.
This looks like fantastic software, it's the most exciting thing I've come across in several weeks or maybe even months, and I'm looking forward to trying it out.
tl;dr: don't knock it till you try it!
Is it a pest control system that doesn't send me emails?
Also, routing exceptions using git blame isn't about placing blame on individuals for defects, it's about automatically managing and routing the massive quantity of exceptions that can occur in a large rails app with many users and many developers.
Second, as others have mentioned, I loaded this page, scanned for a few seconds, and still really had no idea wtf Squash was.
Finally, this phrase: "Squash uses git blame to figure out whose fault it was" is really terrible. This assumes that someone is at "fault" for introducing a bug. Not all software organizations embrace this concept and instead consider bugs being introduced as a team-wide or process failure, and do not make a point to assign blame to defects to individuals. Be careful not to shoehorn your own views of methodology into your marketing.
It isn't about blame, it's about finding one person (and only one person) who is likely to be able to fix the bug or at least know who to delegate the bug to. The workflow is around reducing signal to noise, so that if you get an email from Squash, it's something you need to take action on. Either fix the bug or find someone who can. That's why it always tries to find one person to give responsibility to.
Seriously, this is an open-source project. Why in the world would he use a professional voice over? That's just weird. If anything, the home page is too polished. People seem to be mistaking it for a well-funded commercial endeavor.
For example, NewRelic's PHP support is still not on a par with their Rails support...
The code in Errbit is quite reasonable, and the team is great as well - would love to hear the rationale!
On the minus side, Errbit is somewhat buggy, and very slow. If it gets any load at all (say, above 2-3 exceptions per second), it becomes near-unresponsive. A casual look at what it's doing seems to indicate MongoDB traffic. We are running Errbit on a small VM, but the slowness is way beyond what can be explained by the VM. So on the rare occasion we get an exception storm it's pretty much impossible to access Errbit.
It's also terrible at merging identical exceptions. Not sure why, haven't look at the code, not bothered enough to do so.
Also it looks like they found a font to abuse in exactly the same way that Comic Sans kills aesthetics, but with a different name and a slight update.