Archive for Development

We spend a lot of time worrying about the usability of Gibraltar.  Our goal is to have our brand known for creating intuitive, attractive products even though we develop exclusively for a platform that (often unjustly) is maligned on the same points.

From Where We Are

One part we agonized over at length (and did a number of mockups, prototypes, revisions, experiments…) was how to handle creating on-demand extra views of session data.  In the current release of Analyst there are five types of views, three of which you can create multiple independent copies of.  To solve this, we created a “blank” tab for each type that could be created dynamically to make it clear what the different potential views were and create new copies.

There are some awkward issues with this:

  • Poor experience curve: The three targets for creating the distinctly different new views don’t quickly pop out of the noise of the page.  Once you’ve crossed through the initial phase of discovery you can’t really get quicker (develop muscle memory) at selecting the right item, particularly since they move to the right as you create new documents.
  • No room to grow: Three distinct items is the upper bound of credibility for this approach.  Otherwise, it’d just take up too much room and you’d miss the left items, they would just blend in.
  • Limited discovery: For a range of technical reasons you couldn’t get much of a hint to why you should pick a specific option.  You pretty much have two words and a 16 pixel image.

Adding the ability to create session views pushed us over the edge – now users can create an unbounded number of unique views that need to plug right into this user interface.  There’s no way that’s going to fly with this approach.

On to Something Better

So, we needed a two step approach to give us a lot more UI surface to work with when picking the specific view a user wants:

Now there’s just one target to click to create a new view, and while it does still move to the right, it’s always the right-most target so it’s easy to pick out of the view.  The biggest problem is discovery, and we’re worried about that:  Will someone who opens the session view the first time realize just how much great stuff is available through new views?  We’ll have to find out.

Once you select New View we have a second problem:  How to pick the view you want.  Here’s the first approach we beta tested:

There are some good things going for this selection:

  • Big targets: Each button is very large and visually distinct and suggestive of the type of view you’re creating.
  • Good experience curve: Their positions are fixed, and the dialog shows in the center of the session viewer so you can be reaching for what you want before the dialog even shows because you know where it’s going to be.
  • Good discovery: At this level we have the room to show a very large tooltip as you hover over an item to tell you about what it is and why you’d want it (not shown in the picture).
  • Extensible: We can easily add more items without breaking the paradigm:  We could add more buttons up to about 9 before it would significantly break down (but you’ll see below we went a different way)

Still, for some users it still felt awkward:  Some of our experienced users still had to pause each time, stare at the dialog, and then select.  This led to another round of prototypes and an improved version:

In this version, we’ve done two things:

  1. Text and Graphics: To accommodate the fact that some people scan graphically and some scan for content we added a text label that’s always visible even without a tooltip.  The tooltip is still there to add expository but many people won’t start hovering over the icon until they think it’s the right one.
  2. More air to look more interactive: By increasing the padding around the graphics the visual effects of mouseover and focus make the display feel more friendly and interactive.  It encourages hovering over an item before you’re sure it’s valid.

You can see the effect of the extra air when the mouse is hovering over a button:

Now With Your Extensions

Finally, if you go ahead and add some add ins that create their own custom views this dialog automatically extends to give you those choices.  In this case it’s clear which are the intrinsic views and which are extension views.  We’ve also set aside space for the extension views to describe themselves.  Developers hate empty visible boxes so we hope creating clear space in the dialog will encourage them to create good descriptions.

We’re running the risk that this approach is too optimized around an assumption that there will be a lot of add-ins, but it still provides good discoverability without making it more complicated to create add-ins.  Plus, it only unfolds the additional complexity of managing these extra views if there are any around that need it.

Soon it’ll be Your Turn

We’re going to release a beta of Gibraltar 2.2 imminently.  We’re considering it a beta because of the new add-in API which we want to get a broader set of feedback on before we’re committed to its design.  The rest of the product has to pass all of our normal tests, so there’s going to be plenty of reason to upgrade to this version.

We’d love to hear your feedback on what you think of the changes we’ve made, the new API, and how we can continue to make the product easier to discover and more effective to grow with you.  We expect Gibraltar to be a tool that works on many levels to reward beginners and experts alike.  Hold us to it!

Categories : Development, ISV
Comments (3)
Mar
22

Unpredictable Feature Coolness

Posted by: Kendall | Comments (1)

From time to time, folks will ask us to spend a few days helping them to the best integration and get their staff up to speed on how to get the best results they can.   A few weeks ago we were on-site  doing just this, helping integrate Gibraltar into a large multi-tier application.   We set them up with version 2.1.1, the current production version.  Normally we’re all running the latest internal build but it’s safety first with customers.

There’s one feature we all really missed – we’ve added the ability to have Gibraltar minimize to the system tray and automatically run from the system tray in our latest builds.  We added this feature originally to address a shortcoming:  With the new API for session analysis it’s really desirable to be able to leave a copy of Analyst running somewhere to make sure sessions are being pulled from Hub and processed in a timely manner.  This allows you to generate your own alerts, update external databases, whatever – things you’d want to have running all the time.  We’re going to be integrating this into a Windows Service soon, but meanwhile it’s only available in Analyst.

What?  Another System Tray App?

We added this option with a health amount of reluctance.  Frankly, I usually hate applications that presume I want to run them on startup and minimize to the system tray.  Most of these apps are the things I actively hunt down and kill when I’m suspicious of my machine’s performance.  But, it was the most expedient way to solve a problem we knew would be there with Add Ins.

To our surprise, we’ve found that combining:

Run on Startup + System Tray + Hub

really changes the experience with Gibraltar.  Now, when I log in it will start pulling sessions quietly in the background.  When something interesting happens, I get a toast popup.  I don’t have to remember to start Gibraltar when I log in, and when I get an alert that a customer has an issue I don’t have to wait (even seconds) for the data to sync down.

We were split on even shipping this feature – if we could get the Windows Service done in time, it might never have made it in.  But, based on our experience of missing it quickly when it wasn’t there we’re now committed to making it a full feature.

A Non-Evil Background Experience

We want this to be another feature that “just works” so you simply enjoy the experience.  Along the way:

  • Same Application: Analyst is analyst – it’s the same executable whether run at startup, picked from the menu, or because you opened a package.
  • Minimized footprint: We made sure that it stays as small as we could in RAM.  The main form doesn’t load until you open them up, it unloads completely when you close it, and we made sure we aggressively free memory when processing session data.
  • Adaptive priorities: We even lower the priority of our background processing when exclusively in the system tray to recognize that you have more important things for your computer to do.

Even if you never develop or use a custom add in, you’ll like this feature – particularly if you use Gibraltar Hub.  We took this opportunity to make our notifications more intelligent as well:

  • Accumulate when hidden: If you have the console locked or otherwise can’t see the alerts we save up the data and display one cumulative alert when you get back.
  • Track what you’ve seen: If you’re working along and want to ignore alerts as they show up that’s fine.  You can hover over the system tray icon and find out the running tally of what’s come in since you last opened up Analyst.
  • Better numbers: It’s a finesse point, but we’ve re-written the alert messages to be more useful to convey what type of data has come in.  For example, if you get 50 new sessions and 3 have errors, it’ll say exactly that instead of saying “50 new sessions, some with errors”.

Non-linear Results

What I love most about this feature is that it makes a real difference to the enjoyment of using Gibraltar in real world scenarios – when you are trying to support an application in production with sessions coming in at unpredictable times while the rest of your job demands your attention.

Sometimes features are like that – a small adjustment in two areas creates a cumulative value you just couldn’t see coming.  It’s also something you won’t get if you solely focus on functional specs and end-user feedback.  You have to be willing to experiment and try a few edge things out without being committed to them.  Some will be a bust, but every once in a while you’ll open a door to a new room of capability you would have totally missed otherwise.

It wasn’t obvious to us during development because we rarely get a chance to run Analyst for very long outside of some testing we do.  After all, we’re constantly starting & stopping it to check this feature or that.  It’s one of the reasons we love to do contract integration work – we get to see what does and doesn’t work for real customers in a more direct way than we get from customer feedback.

Categories : Development
Comments (1)

One last update to Gibraltar 2

We’ve done several functional releases this year and we’re going to do one more minor one before we close the books on 2.x.  This last update is going to include some memory usage optimizations, reliability tweeks, and the first version of the Gibraltar Add In API.

Memory and Reliability Optimization

There are a few scenarios we use more memory than we should in the Agent.  These scenarios all revolve around sending larger sessions via email or writing them to a package file (Hub users are not affected because it exchanges data completely differently).  We’re changing how these operations are performed to emphasize using constant memory (and less memory) instead of being optimized for the fastest performance.  For smaller sessions the performance optimizations don’t matter, and for larger sessions it’s preferable to ensure we can not interfere with the running application vs. getting it done in the smallest time possible.  This trade-off is done by not explicitly buffering data in RAM but instead using self-deleting temp files for interim storage.  If your computer has enough RAM the OS will cache these anyway and if you don’t you’ll be thankful we aren’t using what little you have.

AddIn API

We’ve been working on this as part of the 3.0 plan but think there’s enough there to release it early.  This is the first time you’ll be able to extend the Gibraltar Analyst itself using your own code.  Our primary goal was to provide a safety valve – a way you can handle analysis and integration scenarios we’re not handling yet.  If you want to integrate with your own customer service or defect tracking system, create your own visualizations or whatever this will provide a way to get it done.

You’ll be able to extend Analyst in two ways:

  1. Analyze every session: Whenever a session is added to the user repository Analyst checks through it to record error statistics.  You can extend this pipeline to add on your own inspection, looking at the entire log or just the errors.  This is done automatically in the background.
  2. Custom session commands: You can add commands to the context menus wherever sessions are being managed to get specific sessions on request.  You can chose whether you want to provide your own user interface or be run in the background.   Register your command and it will automatically show up on session folders, in grids, and other places where sessions are being managed.

What can you do with this?  Well, a few ideas are:

  • Forward details about errors to an external customer service or defect tracking system: With an Analysis add in you can check each session for errors and create an email or do whatever you need to open a new ticket.  You’ll have access to everything in the session file.
  • Export data into a data warehouse: If you have your own external system for tracking overall metrics or whatever your analysis add in can write data to a file, upload it to a database or whatever you need.
  • Create your own visualization: Since you know exactly how you’re recording data (log messages and metrics) you might want to create your own special graphical treatment that leverages that knowledge to provide quick insight.

Share and Share Alike

A best practice is to ship an extension API with several great examples that show best practices.  Well, we didn’t want to hold it back long enough to get them done so we’re going to be looking to our community for great examples to share.  If you create an extension that others might be interested in, let us know – we’re going to set up a place to share extensions with the community.

We’re interested in hearing from the community on how you want to be able to extend Gibraltar – Analyst, Agent, and Hub – so we can incorporate those ideas into 3.0 and beyond.

And then on to 3.0

We have a queue of items we’re already working on that are too big to fit into a dot release of the product.  For example, we haven’t changed the data format of Gibraltar since the early betas.  There are some issues that we simply can’t fix without adjusting the format which will create a situation where older Analyst won’t be able to read the newer data.  We aren’t willing to do that on a dot release.

We also are going to break new ground in 3.0 on the CEIP front with an all-new application management view of the session information.  When we get closer to our first beta we’ll release more on that and other enhancements.

New features for all our friends

Every Gibraltar customer will get a free upgrade to Gibraltar 3.0 when it ships.  This is the power of our software maintenance in action – every license includes a year of it to make sure you get the most out of your investment.  We don’t have a specific date in mind for shipping 3.0 but expect it to be late Q2/early Q3.

Categories : Development
Comments (3)
Feb
19

Gibraltar 2.1.1 Released

Posted by: Kendall | Comments (1)

kick it on DotNetKicks.com

We’ve published Gibraltar 2.1.1, you can download it right away.  There are a number of great enhancements in this release.  We’ve already covered a few of them before:

Based on feedback on the beta release we’ve added some additional capabilities:

  • Send Session Now: If you subscribe to the Message Alert event you can send the current session immediately to the Hub or Email based on the current configuration by setting one property.  Check out the code sample to see how.
  • Easy email notifications: You can leverage the same email configuration the Agent is configured with to send messages within your application for any reason.
  • Anonymous Data Collection: Session data can be anonymized during collection so no personally-identifying information is sent to you.  Just set one option and you’re good to go.
  • Detailed .NET Memory Counters: You can now enable detailed memory performance counters that monitor the .NET CLR’s garbage collector and memory monitoring.  Very useful for monitoring for memory leaks in production applications.
  • PostSharp Enhancements: We’ve made argument tracking more sophisticated so you can do more without compromising the performance of your application.

We also fixed a number of defects (23) that mostly apply to edge cases, but no defect is minor when it affects you.  In particular, our CEIP identified a error on first time startup in several cultures that prompted users to restart Analyst.  Ouch.  Fortunately we were able to figure it out and fix it.  We addressed Thread Ids too.

Hub Subscriptions Live Too

On February 15 the Gibraltar Hub Service is fully live.  You can get a free 30 day trial and then if you like what you see you can subscribe for terms from 1 month to one year at a scale that works for you – from a single laptop up to your whole large team.   There’s no long term commitment, and you can even easily migrate from the Hub Service to your own private hub down the road if you want to.

This Release Made Possible By People Like You

We say it all the time, but this release in particular was driven entirely by end-user requests.  We’re working on the next major release of Gibraltar but we stepped back and wanted to address requests from our customers and a few prospects as well.  When you read the list of everything we’ve done, other than a few defects we found internally and through the CEIP this is based on what our customers felt was most important.  Are we missing something you need?  Let us know:  we’ve proven we listen again and again and again.

You can read a thorough list of the new features, defect fixes, and changes at What’s New in Gibraltar 2.1.1.
kick it on DotNetKicks.com

Categories : .NET, Development, ISV
Comments (1)