Click here to monitor SSC

Dom Smith's Blog

Technical Author - Red Gate Software

  • It's just HTML

    Posted Thursday, September 22, 2011 10:00 AM | 3 Comments

    This blog post is based on a lightning talk I gave at the Technical Communication UK conference in Oxford on 22nd September 2011. The theme was 'If I ruled the world', and the topic was 'authoring tools that limit the way we work'.

    Before I start, I should note that I'm going to be talking about Author-It here, but this isn't a rant about Author-It. Instead it's an argument that we don't actually need anyone's help authoring tool at all. Also, I'm assuming that you're outputting your content primarily to the web; if you're not, you should already be asking why not, but that's a whole different discussion.

    Recent development work on the ANTS Memory and Performance Profiler has required me to do a few things that push the boundaries of the tools and infrastructure that we use at Red Gate. For example:

    • The Memory Profiler has the new Instance Categorizer graph, which cannot be described without a screenshot wider than the 630 pixel width currently allowed by our website.
      The solution I adopted was to use jQuery to zoom into the screenshot when the mouse is hovered over it.
    • The Performance Profiler has a new demonstration application, which (although very straightforward) takes 41 steps to describe.
      If the description were in simple text form, it would doubtless be off-putting to evaluators. By splitting it into a Flash presentation, with lots of screenshots, the demonstration hopefully doesn't seem to be so much of a chore.

    Both of these should be possible in Author-It, our current Help Authoring Tool (HAT), using HTML Snippets. Snippets aren't a great solution though because they require working with raw HTML which doesn't always display in the editor. It's even more of a problem for us, because the XSL transforms applied during our publishing process tend to break unusual things in the Author-It output anyway.

    As a result, I started intervening in our publishing system, by manually editing the HTML output between the output of the XSL and putting the page on the website.

    Given the numerous problems we have encountered using Author-It (those of you who have followed my colleague Roger Hart @RMH40 on Twitter for a while will already know about these difficulties, so I won't repeat them here), I started to wonder what benefits we gain from it.

    Let's take a look at the main features Author-It provides according to its own website and consider how you could replicate these features on the web without the tool:

    • Reuse existing content as you type, prompting you with similar or identical phrases used elsewhere in the library.
      Server-side includes are easy in most publishing systems on the web.
    • Work in an optional web-based authoring interface, allowing staff anywhere with an internet connection to log in and work.
      Wikis (for example, MediaWiki, Atlassian Confluence and even SharePoint) do that... though I'm definitely not suggesting using SharePoint for documentation.
    • Manage workflow to assign content tasks, track the results, and view overdue tasks
      If documentation tasks are in the company's existing bug tracking system (at Red Gate we use Atlassian's JIRA), you don't need another tool to manage workflow.
    • Review and edit content in real time
      What does this even mean? That you type a letter on the keyboard and it appears on the screen immediately? Well yes, even Notepad does that.
    • Localize content as it's ready, reducing localization costs
      We don't localize our products, so this is perhaps a more major consideration for other organizations, but surely web pages could be localized when they are ready too?

    Given the lack of a compelling argument in favor of Author-It here, I asked on Twitter what features users most value in a HAT. The answers were:

    • User-defined variables
      Again, this is trivial in most scripting languages for the web.
    • Style control for online and print
      The @media type in CSS2 allows you to specify different online and print formats.
    • Code editing
      Most HTML editors allow you to edit the HTML code manually.
    • Single-sourcing
      I've always been fascinated by the industry's fascination for single-sourcing. I've never found it useful personally. But anyway, as noted above, single-sourcing is basically a server-side include as far as any web developer is concerned.
    • Link viewer
      This is the ability to see which pages link to which other ones in your content and, OK, I'll admit that I'm a bit stumped on this one. After publication, Google Advanced Search can do this but to do it before publication you'd need to write a short script to crawl your content on a test server. It shouldn't be too hard, however.

    So, there's possibly one feature for which a HAT is actually useful.

    Actually, from my own experience, I can add another two: creating Tables of Content, and the ability to quickly compile the HTML output to CHM or PDF. Neither of these is insurmountable, though.

    In conclusion, my thesis is that, if you're outputting primarily to the web, a HAT is basically an impediment to your ability to innovate. Let's just not use them, and replace them with a sensible HTML editor, such as Adobe Dreamweaver. That will allow us to do anything that the web has to offer.

    It also opens to door to using proper content management systems, improved meta-data and, for us Author-It users who are reliant on that product's limited implementation of source control, access to proper version management.

    Ultimately, all we're doing is putting HTML on the web; and editing and publishing web pages has been a solved problem for well over a decade. This approach allows us to concentrate on the writing (which is our specialism), and not to worry about the tools we use.

    Although this lightning talk was well received at the conference, I suspect it might get a lot more comment published on the web. Please do give me your feedback. Is there something I've completely missed?

  • The ANTS Memory Profiler Filter help panel

    Posted Wednesday, August 31, 2011 9:00 AM | 0 Comments

    In my last blog post, I discussed the features that were renamed in ANTS Memory Profiler 7.0. In this post, I present another aspect that I worked on in the same product: the 'Filter help panel'.

    Like many of the changes we make in our products, user feedback strongly influenced our decision to include additional embedded user assistance in the profiler. Throughout the lifetime of ANTS Memory Profiler 5 and 6, we had learnt that the optimal way to use the profiler depended on the specific problem being investigated, but a substantial number of users did not have sufficient understanding of .NET memory to work out how they should use the tool in their circumstances. Sometime after watching another usability test in which someone who was unfamiliar with the profiler failed to locate the source of his memory leak, my colleague Stephen Chambers (the usability engineer for ANTS Memory Profiler) and I decided that we needed to do more to assist.

    We already knew from speaking to customers that they often use the memory profiler for the first time when they need to solve an immediate problem. The software isn't generally investigated in case it is needed later on. In turn, this means that users want to get to the cause as quickly as possible, and don't want to read the help to find it.

    So, we had a dilemma: on the one hand, there are users who don't want to read help, and who are probably under pressure to solve an issue. On the other, whilst we strive to make our software as easy-to-use as possible, .NET memory is complex. To be able to use the profiler, the fundamentals need to be understood and the results need to be interpreted.

    How could we help?

    Our idea was to include in the product a series of hyperlinks to guide users through the profiling process. Together with the developers, we created a decision tree defining the main types of memory problem likely to be encountered and how best to go about fixing them.

    It was very detailed, to say the least:

    clip_image002

    Decision tree for guiding users through a memory profiling problem

    Stephen and I decided to add this information to the recently-redesigned panel which contains the filtering options for the memory profiler. The rationale was that our testing had shown the filters to be something that novice users look at while trying to work out what the next step should be.

    clip_image004

    Implementation of the Filter help panel in ANTS Memory Profiler 7.0.0.521

    As with all innovations at Red Gate, the new user assistance immediately went for user experience testing. Three times, we sat a novice user in front of the latest build and three times we hoped that they would solve their problem quickly by being led straight to the solution by the new help. On each occasion, we were disappointed to learn that the user's problem was one of the cases we hadn't accounted for, and so our work hindered, rather than helped, their investigation.

    Back to the drawing board.

    I decided that we'd have to get the user to read the online help, because one small text box clearly wasn't sufficient space to give enough detail. Because the user was likely to be under pressure, however, they would have to go to exactly the right page, and that page would need to contain just the information they needed. Any background information would have to be somewhere else.

    Together with Andrew Hunter, our resident memory guru and the lead developer on ANTS Memory Profiler, I created a list of the five main types of memory problem, in order of likelihood:

    • Large object heap fragmentation
    • An application using too much memory
    • Managed code memory leaks
    • Unmanaged code memory leaks
    • Wanting to know what class uses the most memory

    We decided that each of these would become a single page in the web help, and that the Filter help panel would point to the relevant page. Additionally, we would need a background article on how .NET memory works, to provide the necessary domain knowledge to use this information.

    The result was a whole new chapter in the help, and a much-simplified Filter help panel in the final release:

    clip_image006

    Implementation of the Filter help panel in ANTS Memory Profiler 7.0.0.731 (Released version)

    The final, and most important, question is what users think. We've had regrettably little feedback about this feature, but what little we have received indicates that the new help has been highly appreciated. A strong indication of success comes from Google Analytics, which indicates a phenomenal amount of hits on the linked pages ('I do not know which kind I have' was hit over 1100 times in August 2011 alone!) and the fact that, anecdotally, our Support team seem to have received fewer calls from confused customers since the launch of version 7.

    So, if you've used the Feature help panel, I'd love to hear what you thought of it, and whether we should do something similar in other products that need a certain amount of domain knowledge.

    Incidentally, if you're interested in hearing more about our approach to embedded user assistance, I'm presenting a three-hour workshop on just that topic with my colleague Roger Hart at the Technical Communication UK conference in Oxford later in September.

  • Objects or instances

    Posted Wednesday, August 17, 2011 11:06 AM | 4 Comments

    Why we renamed some features in ANTS Memory Profiler 7

    When you are designing a complex product, it is important to ensure that terminology is both consistently used and unambiguous. This helps to avoid confusion amongst users and so contributes to that mass of small things that combine to make the difference between software which is a pleasure and a pain to use.

    Red Gate's ANTS Memory Profiler is a typical example of a complex product and, for some time, there has been a simmering debate amongst its developers as to whether it is more appropriate to refer to 'objects' or 'instances' of classes being held in memory. Of course, technical correctness - although important in memory profiling - is not the only variable at play. We also need to ensure that our terminology is familiar to users, being especially careful not to use terms differently for the way that they are used by Microsoft and in textbooks on .NET Memory usage.

    Within linguistics, it is generally accepted that language abhors synonymy. It is exceedingly rare (if, indeed, it is ever possible) for two words to share exactly the same meaning and usage. It was on these grounds that I decided to spend a couple of hours investigating how we (Red Gate), Microsoft, our competitors, and our customers use these two words.

    The conclusion of this research was that:

    • 'instance' is a relatively-rarely used term in memory management, but when it is used, it refers to specific instances of a specified class.
    • 'object' is much more common, but has a less specific meaning than 'instance'. The particular class involved is often not described.

    We therefore made a small number of changes to the product, which you might, or might not, have noticed. For example, the Object Retention Graph in ANTS Memory Profiler 6 becomes the Instance Retention Graph in ANTS Memory Profiler 7:

    clip_image002

    ANTS Memory Profiler 6
    clip_image004
    ANTS Memory Profiler 7

    This is because the Instance Retention Graph shows the retention for a particular instance of a previously-selected class.

    On the Filter panel, however, you will notice that we continue to use the word 'Object' in the various filter names:

    clip_image006

    This is because these filters filter the Class List to display objects which can be objects of any class.

    Do these names matter? There would certainly be a case for suggesting that changing the name of a feature is potentially confusing for some users, or conversely that a simple edit like this is not a big deal.

    Memory profiling is a complicated issue. Whilst we go to great efforts to make ANTS Memory Profiler as useable as possible, at the end of the day you need to have a minimal amount of domain knowledge in order to use the tool effectively. By being a lot more accurate in our use of language, and by creating more educational material over the coming months, we therefore hope that we can help you to use the product in a more efficient manner, reaching results faster.

<February 2012>
SuMoTuWeThFrSa
2930311234
567891011
12131415161718
19202122232425
26272829123
45678910
Exploring SSIS Architecture and Execution History Through Scripting
 When you are using SSIS, there soon comes a time when you are confronted with having to do a tricky... Read more...

A Testing Perspective of Controllers and Orchestrators
 The neat separation between processing and rendering in ASP.NET MVC guarantees you an application... Read more...

TortoiseSVN and Subversion Cookbook Part 4: Sharing Common Code
 Michael Sorens continues his series on Source Control with Subversion and TortoiseSVN by describing... Read more...

How to Kill a Company in One Step or Save it in Three
 The majority of companies that suffer a major data loss subsequently go out of business. Wesley David... Read more...

Migrating from OCS 2007 R2 to Lync: Part 4
 Having migrated the rest of our users and legacy resources across and started getting ready to... Read more...