Archive for the 'Features' Category

Jul 18 2008

Opposition Research

Published by Jeff under Features

One of the things I do is look at competitive products. I do this both to understand their strengths and weaknesses as well as our own. Looking at someone else’s solution to a similar problem can often give you a fresh perspective.

As I looked at several of these, a few trends showed up. The first is that security in other products seems to be left as an exercise for the customer. I’ve talked about that before. Another area where other products take a very different approach is around triggers and alerts. This is another part of an application that either isn’t shown in a demo, or if shown the trigger is already installed and working. The user sees that emails are being generated or actions are being triggered with an aside of “all this and more can be yours with just a little script writing.”

Now, I like script writing as much as the next person (well, assuming it’s not Perl). But I mostly enjoy it when I’m doing it for my own use. When I need it to work for all those crazy other users, then it starts getting less fun. People have this tendency to enter bad data. Or not think exactly as I do. And as much as I try and get them to follow my every command, they refuse. Perhaps when my application for the evil league of evil comes through I’ll have more success. Until then, if other people depend on my scripts then I need to put in thorough error checking. And progress messages. Bummer.

Surround has taken a different approach. We let you write scripts or applications if that’s what you want or need to do. And sometimes you do. But we try to carry as much of the load as we can.

First, we let you specify as much of the criteria for your trigger as possible. That way we won’t even call you if it doesn’t make sense. And you can skip writing code that checks, for example, the user, or group, or file name pattern, or branch.

Second, we let you specify exactly what action (e.g. checkin, add, promote) and when (before or after the event) the trigger runs.

Finally, for some of the most common actions you don’t even have to write a script. That includes generating an email, changing the file state, or preventing the action entirely along with a message letting the user know why.

In a future posting I’ll be listing some of the features I like in other products. And maybe some ideas of how we might incorporate them into Surround.

If there is a feature or approach in another product, whether it’s a competitor to Surround or not, let us know. I’m not afraid to steal borrow learn from others. Now back to that plan for re-educating users to all think alike.

No responses yet

Jul 09 2008

Isaac and Ishmael

Published by Jeff under Features, Product Management

As a Macintosh user it’s easy to feel left out by cross platform application vendors. Microsoft is too easy a target (though I can’t miss the chance to say I use Entourage every day and it never ceases to make me angry), so I’ll pick on someone my own size. Seapine. Although we have a fully native (that means not Java, you cheaters. You know who you are) client and servers on Linux, Solaris, Mac and Windows we don’t always make them, well, native enough. Make all the command keys match common conventions on that platform. Take advantage of platform specific technology, or the latest UI craze.

Now, it’s easier on Linux and Solaris since the only GUI standard is to have one. Everything after that is gravy. And as a long time Windows user and developer I can say that not even Microsoft can always agree on how to do things. But Mac users often have a different expectation. Hitting command W always closes a window. Always. That isn’t to say that all Mac programs religiously follow UI guidelines, and Apple is often offender number 1, but I think that in general things are more uniform and conventions are more commonly adhered to.

So what about Surround? Did I mention we have a fully native client? Although we’re pretty good in a number of areas, we can do better. Some of our command keys don’t map to the generally agreed to convention. We don’t always follow the latest user interface guidelines (for example, there are a number of places we should be using sheets rather than dialogs on the Mac). I’d probably give us a grade of B minus, but I’m looking to make that an A as soon as possible.

That’s were you come in. Since I bounce around between platforms, I sometimes miss places where we aren’t native enough. If something in Surround seems less than Windows/Mac/Linux/Solaris native, drop us a comment either here or at the feature request forum. Since we go through all the effort to create native clients (and servers) on all those platforms, there’s no reason they shouldn’t go completely native.

No responses yet

Jun 04 2008

Slow News Day

Published by Jeff under Features

It’s not unusual for someone to suggest a feature which, in fact, we already have. It’s not even all that unusual for that person to be using the version of the software that has that feature. So I thought I would take a few minutes to point out some features in Surround that you may have forgotten, or missed during an upgrade.

Repository differences

This was mentioned in our last newsletter but I think it’s worth pointing out again. The Repository Differences window shows the difference between the server repository and your local working directory. This includes files that are missing from your working directory as well as files in your working directory not in Surround. It can even do this recursively. Check out the newsletter or the user documentation.

View/Edit file options

If you don’t want to use the internal viewer or editor for files, you can easily customize what to do using your user preferences. If you have a favorite XML editor, for example, you can tell Surround to use that when double clicking on an XML file. This is especially useful for text files, which all default to the internal editor.

File list and Repository menu

Speaking of user preferences, you can customize the list of items in the context menu for files and repositories. That way, if there are some actions you rarely perform (like sharing files) you can remove the clutter from those menus. This is also a great chance to take a look at some items like the new Open Containing Folder feature we added in Surround 2008.1.

Changelists

Although one of the primary uses of changelists is to guarantee a set of actions occur atomically, they are also a great way to group a set of actions together and give them a name. Unlike a lot of other SCM systems, Surround allows you to give changelists a human-readable name. Then, if you ever need to know “what were all the things I did to address this request” you can pull up your list of committed changelists and see.

No responses yet

May 15 2008

A Change Is Gonna Come

Published by Jeff under Features

Conversion can be a tricky business. No one wants to convert from one thing to another. It assumes you were wrong in some way. And you know it’s going to be hard. And what if the new thing isn’t really any better than the old thing? Then all that work was for nothing.

It seems like when contemplating a move to a new platform like Surround from an existing one, you go through the seven classic stages of grief.

  • Disbelief: Can we really move over to a whole new SCM system?
  • Denial: It’s just too big a process. Maybe next year.
  • Bargaining: Maybe we’re not using are current system right. Let’s try harder.
  • Guilt: We’ve got this huge investment. How can I just throw it all away.
  • Anger: Why is our current system such a pile? How could a company ship this kind of crud?
  • Depression: I’m going to be swamped just installing and understanding this new system for weeks.
  • Acceptance: Fine. The sooner we switch over to the new system the sooner I can get back to real work.

I bring this up, because we’re talking about conversions internally. Today, we provide a number of conversion tools from other companies SCM tools to Surround. We do this because so many of our customers our moving from a competitive product to ours. However, I’m not sure it’s actually in anyone’s best interest to provide these tools.

When people use an inferior product, they find ways to cope. They come up with “creative” branching strategies (like not branching at all). They use labels in fun and exciting ways. They use weird naming conventions to convey metadata. That’s the reason they are moving off their current system. So, why is it a good idea to try and convert and reproduce all that in their shiny new Surround system, which doesn’t have any of those limitations?

In addition, no matter how good our conversions tools are they inherently involve some level of mapping. Labels, branches, security are all similar but slightly different in each tool so after conversion the system will be similar but not identical.

Finally, I think after the conversion is complete a number of customers realize they don’t want it. I know that before I joined Seapine, I converted to Surround from Visual SourceSafe. After the conversion completed, I realized that as part of moving to Surround, I wanted to rearrange my repository structure, so I threw that out, created my new structure and checked in the tip version of all my files. I also kept my SourceSafe server running in corner for the odd occasion I needed something from item.

Considering all that, and considering the amount of time to support, enhance and test conversion tools is this a good use of time? Would customers be better served if we simply stopped converting their data, and instead focused our resources on continuing to improve Surround? If you converted to Surround from another system, I’d be interested in your thoughts on how it went, and if you regreted converting rather than starting over.

2 responses so far

Apr 30 2008

Post Hoc, Ergo Propter Hoc

Published by Jeff under Features

We’re investigating adding an annotate/blame feature in Surround SCM. If your not familiar with this concept, it allows you to mark every line in a file with the date, version and person who last changed it. For example, if the current version of your file looks something like this

int bar;
bar=7;
bar++;
if (bar>7)
    printf(“Big bar”);

The after running annotate, it might look like

Version     User        Date
25          gatesw     1/12/2008   int bar;
23          gatesw     2/25/2007   bar=7;
25          gatesw     1/12/2008   bar++;
8           ballmers   1/11/2006   if (bar>7)
7           gatesw     5/15/2005        printf(“Big bar”);

In looking at this feature, I discovered there was some “unease” about it, specifically around the name. It centers around that blame word. No one likes to be blamed for something. No one wants to play the “blame game”. “Let’s not finger point, let’s solve problems!” Blech. I think I threw up in my month a little just writing that.

Early on it seems to be generally called blame, but later systems started using the name annotate. Much nicer. While the actual name might not be critical, how people use it is and I think the “blame” word makes more sense.

I’ve used functionality like this (or simulated it) for a while, and I have to say it was most often for  blaming someone. I saw some code, and I wanted to find out who was responsible for it. Often it was to have a reasonable discussion. “Can you help me understand what this code does.” “We’re not using that approach any more, can you change it.” Certainly there were occasions when it ran more along the lines of “Who’s responsible for this mess?” or “Who dared to touch the perfection that is my code?”. Though, as the title of this post reminds, just because someone changed something it doesn’t mean the problem you’ve run into is because of that change.

You can certainly use this kind of feature for code reviews and related activities to understand the history of file. But I believe that the primary use case is when you see some changes that you question and want to track down the responsible party.

I don’t think there is any issue with that, and thinking of this feature in that way may drive different functionality than assuming it’s most often used for code reviews and such. For example, if the primary use is for code reviews, then you might want to really make sure you have excellent printing and exporting capabilities. On the other hand, if blame is your game, then you want to make sure it’s very interactive. You might want to easily see what other changes went in with that version. What other files were changed by that user at the same time.

I guess we could call it “responsibility”, but that doesn’t exactly role off the tongue either. The fundamental question still remains, though. What is the primary use for functionality which allows you to identify the person who last modified a set of lines in a file?

I’d be interested in peoples feedback on how they might use this. And if you don’t like how we implement it, please don’t blame me.

4 responses so far