Release 1.3.2

This release contains a fix for a bug I found while making a screenshot while fixing the wording on the blog post for a previous version. The bug was, when you went to save a ZIP file of all the SVG files for a catalysis report, nothing got saved. Now that’s fixed.

Release 1.3.1

This release contains a tiny fix to a tiny problem I had failed to solve in the 1.3.0 release but (of course) thought of a solution to the very next morning.

You want to know what it was? Okay, thanks for asking.

When I was drawing counts on contingency chart bubbles, and the bubbles were too small for the texts to fit into, I couldn’t figure out where to draw the texts so that (a) they could be read and (b) they would be associated with the right bubble. Without displacement they looked like this. You knew which bubble the text referred to, but it was sometimes ugly.

So I tried moving the texts outside the bubbles in both X and Y dimensions. But the resulting charts looked crazy, with numbers scattered all over the place, and it was not always easy to tell which text went with which bubble.

So I put out version 1.3.0 with the numbers always in the same place, but sometimes hard to read.

Then, the next morning, I realized that I should displace the texts only in the Y dimension. That way they look consistent but shift downward when they can’t fit inside the bubble.

It looks a lot better now.


Release 1.3.0

This release includes many improvements, mainly to to the catalysis process. We would like to thank our supporters for the development commissions that funded this release. (Want to see what’s coming next for NarraFirma? Have a look at our new commissions page.)

New report type

First, there is a new catalysis report type organized by themes, or clusters of observations. In this new type of report, interpretations follow observations instead of the other way around.

Also, you can now save a bundle of images associated with your observations in a ZIP file (in PNG or SVG format).

Also, all reports now use HTML headers (H1 to H6) to start the various sections of the report. These are more likely to be recognized by your word processor as styles. (LibreOffice picks up HTML headers pretty well.)

More flexibility in creating observations

You can now set up multiple observations per pattern. You could already do that using the @header@ sectioning system, but it was awkward and difficult. Now you can do the same thing using buttons in the interface. This also means you can cluster your observations separately even if they connect to the same pattern. You couldn’t do that before.

Please note that we have not included backward compatibility for the old @header@ sectioning system. We decided that leaving in all that messy code (not to mention adapting it to the new report types) was too risky. If you have any reports with observations that use the old @header@ system, please copy and paste your texts into new observations.

Also, it is now possible to include multiple patterns per observation. This is useful when you see the same thing happening across two or more patterns, and you don’t want to write what is essentially the same observation in two places. Now you can include a list of additional patterns (graphs) to display for any observation. This is also useful when you are showing a particularly confusing contingency (bubble) chart, because you can include the bar charts for each axis right there in the observation.


New report fields

Observations have a new linking question field, which you can use to connect the observation to its interpretations. This question will help you avoid restating the observation as you write each interpretation.

Interpretations have a new questions field, which you can use to pose questions to the people who are doing the sensemaking. This addition was suggested by a NarraFirma user who pointed out that because catalysis is supposed to generate more questions than answers, it would make sense to have a place to write the questions. (I should have thought of that a long time ago.)


This example shows, respectively, the interpretation name, text, questions, and idea.

New report options

Many more things about the catalysis report can be controlled by the NarraFirma user, including:

  • Which observation strengths to include (in any of the four types of report)
  • The order of report sections (which can now be set during clustering)
  • Whether to print each perspective/theme/observation/interpretation (that is, you can temporarily hide report elements)
  • Whether to show sequence numbers (1, 1.2, 1.2.3) for all report elements
  • More labels (for interpretation questions and ideas)
  • How big graphs and graph fonts should be
  • Whether to show or hide non-response (“No answer”) counts (overall and per pattern)
  • Your own replacements for all graph and statistical texts (making it possible, for example, to remove all English words from reports)

Graphing improvements

A few tweaks to the graphs make them look better. Contingency charts now show observed (and sometimes expected) counts per bubble and per row/column. This is useful in printed reports where you can’t hover over anything to see a number.

Also, the Y axis labels on contingency chart have been flipped — now they read from top to bottom, which makes more sense. And the “No answer” count is last, not first.

You can now suppress showing “No answer” counts, and you can set this option for the entire report and per pattern (for example, note the lack of “No answer” counts in the table above).

The little histograms on contingency-histogram charts are now all the same width, so they are easier to compare. The heights of the boxes show the number of stories, but the widths are all the same.

Interface improvements

A variety of interface improvements have been made. For example:

You can save any graph you are looking at to a file.

Clustering has gotten easier, with multi-select click and drag, plus more information on what you are clustering.

Multi-user collisions (between users editing the same text box) are now handled more gracefully.

You no longer have to wait while the “Explore patterns” page calculates statistics; now that is done in the background.

Options that pertain only to printing the catalysis report have been moved to the “Print catalysis report” page. Interface texts and interactions throughout the catalysis section have been improved.

You could always write simple HTML in catalysis report fields, but now you can also use simple markup for **bold** and __italic__ text. (I added this for my own convenience, but you might like it too.)

And of course several bugs have been fixed. Most importantly, PNG graphs now draw correctly in catalysis reports, and custom CSS is now working correctly for graphs as well as texts.

Release 1.2.6

This release fixes a major bug which we only noticed the other day, but which apparently had been in NarraFirma from the beginning. Deep in the code, an accessor returned the value of a field. While checking to see if the stored value existed, the code mistakenly returned a blank string if the value happened to be exactly zero. This error has now been fixed, but this means that on every histogram drawn (and every statistical test run) before version 1.2.6 of NarraFirma, all scale values that were exactly zero were ignored.

We were very upset to discover this mistake, and we heartily apologize for never having noticed it before.

Most graphs will not have been affected much by this error, since it is rare to collect huge numbers of zero scale values. However, please be aware that it is possible, if you load an older project into version 1.2.6+ of NarraFirma, that a histogram (and its statistical test results) could change.



Release 1.2.5

This minor release adds a few more little things related to having more fun doing narrative catalysis. Most importantly, you can now hide the various panels of statistical information on the Explore patterns page, opting instead to see the same information in a popup window. (Apparently not everyone loves to wallow in statistical results.)



Release 1.2.4

This release contains several quality-of-life improvements for the process of narrative catalysis.

The biggest change is the ability to “switch out” the story collection under a catalysis report by exporting your report elements to CSV, then importing them to a new (empty) catalysis report on a different story collection. This will be useful when you’re partway into writing observations and realize you should have lumped the answers for a question differently (or some other fix to the data). As long as the question short names are the same in both story collections, your observations, interpretations, and perspectives will transfer to the new report.

Several other little improvements and fixes should make catalysis easier, such as:

  • a running observation count
  • a way to randomly sample stories from a graph selection
  • better sorting options in the patterns table
  • an index number for each story (so they are easier to link up between the catalysis report and the story cards)

And so on.


Release 1.2.3 (Critical release – please update)

This critical release fixes a bug we accidentally introduced in version 1.2.0. Starting with that version, if you exported a “project snapshot with stories,” no stories were actually being written out. This happened due to inadequate testing of our new “housecleaning” purge of unconnected stories. (Of course we thought our testing was adequate, but it wasn’t.) We apologize for the error. Since it has only been six days since the release of version 1.2.0, we hope nobody was adversely affected. Please do update your copy of NarraFirma right away, though.

This release also improves NarraFirma’s handling of catalysis in projects where the number of questions is very large (over 100). The “Configure catalysis report” page now tells you how many patterns you will be generating and warns you if the number is very large.

We also found a bug in the code that displays Mann-Whitney U test results. It caused extra test results to be reported in cases where the selected choice question was left blank. It did not affect the accuracy of the test results.

Releases 1.2.1 and 1.2.2

Release 1.2.1:

This was a “thought of it the next day” release, with something I forgot to add until the day after I posted the previous version. This release adds the option to graph multi-choice questions against themselves, so you can explore patterns of coincidence. For example, if you asked people to choose from a list of emotions a story evoked in them, you can look at differences between times when somebody checked BOTH “happy” and “inspired,” and when they just checked one of those things.

While I was testing this, I noticed that some graphs had titles and some didn’t. So I made every graph have a title (and then I messed around with the title styling for a while). While testing this, I noticed that the “observations only” catalysis report did not include observations that had no strength value set. So I fixed that. Now if you choose “observations (all)” it includes observations that have no strength value set.

Release 1.2.2:

This minor update is a “why didn’t I think of that before” update. It copies the button for running a pre-import data check, plus the two buttons for exporting a story form, right to the panel where you are editing the story form. So now you can do those things without creating a story collection, which means that you can mess around with your story form and run the pre-import check while it’s still “live” and able to be changed. It’s a little more confusing with two copies of the buttons (I left the old ones there in case you want to use the “snapshot” of the story form saved with the story collection), but the utility is worth it.

This release also fixes three small bugs for errors that could come up when you are importing data (meaning, they came up when I was importing data).

If you have an existing NarraFirma installation and need help upgrading it to the new version, check our installation page for instructions.

Release 1.2.0

Hooray! NarraFirma has leveled up again, to version 1.2.0. This new version was funded (in part) by several paid commissions, to add things people needed in their projects. Our thanks to everyone who contributed. NarraFirma is getting better for everybody!

Here are instructions for installing or upgrading NarraFirma.

The changes in NarraFirma 1.2.0 are in four areas: better catalysis reports and story cards; better support for importing data collected in other surveying systems; better housekeeping options; and usability improvements.

A. Better catalysis reports and story cards

A1. Better navigation links.  Catalysis reports now have tables of links for each perspective that show all the interpretations and observations, sorted by observation strength. Previously, only the interpretations were listed.

A2. Observations-only catalysis report. You can now save an catalysis report with only observations in it, for use in a catalysis session (where a group of people write and cluster interpretations). You can select all of the observations or just a subset based on strength.

A3. Filtered catalysis reports. You can filter the stories used in a catalysis report or in story cards based on answers to any choice or scale question. You can use this function to create multiple catalysis reports based on subsets of the same story collection, for different locations or participant groups, for example.

In this example, only stories for which the question “Feel about” was answered “satisfied” or “supported” will be included.

A4. Better graphs. You can now save catalysis report graphs in SVG format. This means:

  • The graphs look a lot better, with crisper lines.
  • Because SVG is a vector graphics format, the graphs will scale up when you print your report or look at it on a higher-resolution screen.
  • The report generates a lot faster.
  • You can change many detailed aspects of how graphs are drawn (colors, lines, fonts) using CSS classes.
  • When  you save reports to HTML, the graphs are saved in the file.
  • You can edit the CSS styling in the HTML file and its accompanying CSS file. This means you can style your catalysis report outside NarraFirma. It also means that you can save your “house style” in a separate document you paste in, or just reference.
  • Even though you can’t save a SVG graph to an image file from your browser (like you could with the old PNG format), the images look so much better, and your screenshots are likely to be of so much higher resolution, that this is not much of a loss.
  • Just in case, I left the PNG option in for anybody who wants it back (but it’s not the default).

Here’s an example of the same portion of the same graph using

PNG:         SVG:

In the SVG version, note the increased sharpness, and the ability to change the graph colors.

A5. Copy selected story texts. There is a new button on the Explore patterns page. It opens a window with just the texts of the selected stories in a graph, so you can copy and paste them elsewhere.

A6. Question and answer CSS classes. In story cards, individual question names, and their answers, now have their own classes. So you can style them separately, for example to make particular questions or answers “jump out” when people are looking over story cards.

This is an ugly example, but I was trying to show you how you can change the appearance of everything now, even the commas between choices and the little bars on the slider.

A7. Hide graphs with little data. In multi-graph displays such as scale-by-choice histograms or scale-by-scale-by-choice scatterplots, you can now hide graphs with small numbers of stories in them. This setting is used in the Explore patterns page and the catalysis report.

Here’s an example of a multi-histogram display before, with every graph included:

And here are graphs for the same question with the minimum story limit set to 20:

A8. Story length question. NarraFirma now generates a question showing story length (in characters). I wanted to do this a long time ago, but I wasn’t sure how to handle the upper limits, because story length can vary so widely. But I finally added the question. It acts just like a question you asked, and you can see patterns in how it combines with other things.

On the “Spot-check graphs” page, there is a hard-coded maximum of 5000 characters counted (before the rest pile up in the last bin). In the catalysis report, you can choose your own maximum based on the story lengths you have. In this example, the last bin (2700 to 3000 characters) also includes stories with more than 3000 characters.

A9. Choice x choice x scale graphs. This new graph type was suggested by a NarraFirma user, and I have to say I was amazed to realize that I had never even thought of building such a graph before. I’m calling it a “contingency-histogram table,” and it looks like this.

The size of the boxes shows the (relative) number of stories, and the boxes are overlaid (in the horizontal dimension only) with the mean (the blue line) and the standard deviation (the aqua box) of the scale-question distribution. You can compare the distributions of subsets (e.g., sad stories about trust versus happy stories about traffic) by looking at how the different means are displaced this way or that. You can also hover your mouse over each distribution to see its mean, standard deviation, skewness, and kurtosis.

And there are statistical results: the Mann-Whitney U test for differences between means (the same one you see when you do a choice x scale comparison).

In this example, when somebody said a story was both common and recent, they were more likely to say the story showed “traditional” thinking than when they said the story was rarer and further in the past. This may or may not mean anything, of course – beware of equating statistical significance with actual importance! – but it could be a pattern that worth exploring (by comparing subsets of stories).

The only bad thing about this new type of graph is that you can now generate a really huge number of graphs if you select all of the available graph types at once. Depending on how many stories and questions you have, you could end up with a pretty long wait on the Explore patterns page. However, if you turn on the different graph types one at a time, you should be fine.

B. Better support for importing data collected in other surveying systems

B1. Describe your data in NarraFirma. You no longer have to write a CSV file to import CSV data into NarraFirma. You can now specify import options in NarraFirma itself. You can still write a CSV format specification file, but it is no longer the only option.

B2. More CSV data types. The import system in NarraFirma has been expanded to accommodate a wider variety of CSV data formats, including:

  • Multiple choice delimited questions, where one column has all of the answers to a multi-choice question (e.g., “apples, bananas, pears”)
  • Single and multiple choice indexed questions, where answers are indexes to answers in a list (e.g., instead of “apples”, it says just “1”)
  • Multiple choice yes/no questions, where the answer is in the header and in the cells it just says “yes” or “no”  or “1” or “0” or something (e.g., instead of “apples” it says “yes” in the “apples” column)

B3. More import options. In most cases, you will no longer need to edit the CSV file you saved from the surveying system you like best. For example:

  • You can specify a story length below which stories will be ignored during import. This helps to weed out test stories and misfires.
  • You can specify a text string to remove from your column headers that makes it harder to read them, like weird things your survey system puts in that you would otherwise have to delete by hand.
  • You can specify column headers for the story text, story title, eliciting question, and participant ID, all of which were all hard-coded before.
  • You can specify text questions whose answers will be appended to the story proper as it is being read in (they are not treated as proper questions at all). This is useful if you want to add “can you tell us more about” questions later on in the story form.
  • You can enter a list of column names you want NarraFirma to ignore as it reads your data.
  • You can set custom ranges for individual scale questions.

B4. Pre-import data check. You can now run a verbose pre-import check of your CSV file that will tell you exactly what NarraFirma read correctly and incorrectly, before you import any stories. This will be a boon to people who have been importing stories over and over to get their import formats and settings right. The log appears in your browser console, and it tells you in which row and column errors are detected, so you can fix import problems more easily.

B5. Data consolidation. You can use the import function to consolidate data, that is, to merge similar answers. This is useful in situations where your numbers are too small, but if you added them up you might see some patterns. To consolidate answers, just use the same names for both answers during import, and NarraFirma will count the answers together.

In this example, putting “respect and trust” in the list twice, once for “respect” and once for “trust,” will combine the answers into one larger category. Note that this does change your data during import, and you can’t take such consolidated answers apart again. But in many cases this option will help you convert weak patterns into stronger ones. (If you entered your data in NarraFirma, you can export it and import it again to consolidate it.)

B6. More explanation than you could possibly want. I have written an 18-page “Guide to importing data,” which goes into exhaustive detail, with examples, on the import process.

C. Better housekeeping options

C1. Project reset. You can now empty out a project completely. Why would you want to do this? Because now, when you export a project to a JSON backup file, NarraFirma strips out any stories that were left disconnected (but not deleted) when their story collection was deleted. So if you have been importing the same CSV data file over and over (which you should no longer have to do, but still), you can export the project, reset it, and re-import it, and that will clear out any intermediate stories that didn’t load perfectly.

Note that only project administrators can use the reset facility. Importing projects has been restricted to the administrator role as well.

You can also get a list of all the story collections you deleted, so you can get your stories back again if you deleted them accidentally. (We really don’t like the idea of you losing your stories.)

C2. Project archiving. In the node.js version of NarraFirma, you can now archive a project. This actually just renames the project folder with a dot in front of it, which causes NarraFirma to ignore it, and you could have done that by hand before; but it’s easier now.

D. Usability improvements

D1. Quick links. The NarraFirma home page now has a list of quick links to things you created in the project: questions, forms, reports.

D2. Site admin link. In the node.js version, site administrators finally have a Site administration link right on the Home page.

D3. Nicer admin pages. The design and organization of the site administration pages have been improved in both the node.js and WordPress versions. Here’s the new node.js page:

And in WordPress:


D4. Better descriptions of graph types. I’ve improved the way graph types are listed, so it’s easier to see how graphs are derived from questions, and why you’d want to see each type of graph.

Limits and bugs

I stress tested the software with an imported file of 13,000 stories (actually a 1600-story file copied and pasted seven more times). I wasn’t sure what would happen, but NarraFirma worked perfectly, although very slowly (a few page loads were more than a minute; most responses to button presses were 1-2 seconds). If you are working with large numbers of stories, you might have to increase the memory available to NarraFirma (in node.js, increase the Javascript heap limit; in WordPress, increase the PHP memory limit). Also, I would suggest making subset projects if you collect more than 10,000 stories, just to keep within the limits of your own patience. But in terms of the software handling large numbers of stories, it works.

I found and fixed a number of small bugs as I worked. There are probably only two bugs that anybody noticed:

  1. In WordPress, if you created a new project with a name longer than about 20 characters, you probably got a 500 server error. That’s fixed (in that you can’t create a new project with a name longer than 20 characters anymore). I never noticed the bug before because all of my test projects were called “Test” or some other short thing.
  2. If you had a boolean type question, NarraFirma was graphing its answers wrong: a “no” answer was being graphed as if it was a “no answer” answer. I’m not sure if anybody was using that type of question, but now it’s fixed.

All the other bugs I found were not very important, just spurious error messages or little things that looked less than beautiful.

If you find a bug in the new version of NarraFirma, please send me an email or create a new issue on the GitHub issues page.

Looking forward

The next time I take the plunge into NarraFirma development, these are some of the things I am interested in working on.

  • Internationalization. We started out intending to make NarraFirma easily translatable, but it got triaged out. I estimate it would take about a month or two to make this work now.
  • Better surveys. It seems that most NarraFirma users are collecting their data using other systems, mainly because of concerns about accessibility, off-line use, non-text data, and some of the other things the big surveying systems do really well. I think it would take at least three months to bring NarraFirma up to the “big systems” standards in data collection. Still, this might be something worth pursuing eventually, since our original idea was to remove the need to ship data around between systems. (For simple projects it’s still fine. It’s just for the bigger projects, or those for more particular clients or more difficult conditions, that NarraFirma’s surveying capability falls short.)
  • Effortless import. Another option is to have NarraFirma read survey specification files directly, so you don’t have to enter anything at all to read your data. I’m a little wary of adding this feature, because (a) there are so many surveying systems, and (b) any time a surveying system changed its export format, I would need to quickly update NarraFirma to catch up. But there’s no doubt that doing this would speed up the import process a lot. I can’t say how long it would take to deal with each type of specification file, but two weeks per system is a safe bet (plus more time in the future when formats change).
  • Refactoring. When you’re writing software, you always make some assumptions during early development that you wish you could revisit later. There are several things we assumed early on about NarraFirma use that are turning out different than we expected. For example, it never occurred to me at the start that people would want to write more than one observation per graph, so I had to bolt on an awkward multi-part system to accommodate the need. Another thing I didn’t see coming is that, while the advice in NarraFirma (project planning, suggestions, etc) is valuable to PNI newcomers, experienced PNI practitioners would rather hide it away. So I’d like to add a configuration screen where you can decide how you want to use NarraFirma. It would make certain things appear or disappear, like longer versus shorter questions, tips, opportunities for reflection, import options, and so on. And I’d like to revamp the way NarraFirma talks to you, to make nicer-looking alert messages, for example. These kinds of changes to assumptions buried in the source code require refactoring – that is, going through the code and making widespread changes to the way things work. Refactoring has to be done very carefully so as not to disturb backward compatibility with older data files, so it’s not a thing I would attempt if I didn’t have a nice long time to double-check and test my changes.
  • Better testing. It’s always a bad idea to have developers be testers. Serious, robust software development always includes non-developer testers. But on our shoestring budget I’ve been both developer and tester since NarraFirma started. If I had more funding, I would hire someone to test the software as I worked on it. I’m sure that would improve its quality and stability. I would also take the time to add unit tests – another thing we left out due to lack of time – throughout the code. That would reduce the possibility of “gotcha” errors I didn’t see coming. I do the best I can, but for true quality you need more and better testing.
  • Optimization. NarraFirma is pretty fast if you have a small number of stories and and questions. But if you want to do huge projects, it starts to bog down. It would be nice to work on speeding things up. I’m not sure how long it would take to do this or how much faster I could make NarraFirma work, but I’d like to try.
  • Better stability. If you look at the NarraFirma code on GitHub, you’ll see many “TO DO” comments about things we would rather have done a little better as we built it. Most of them are lower-level things having to do with data storage, message processing, web traffic, and so on. My husband wrote the bottom half of NarraFirma, and he’s a much better system-level programmer than I am. Every time I work on NarraFirma I understand it a little better, but I can’t do most of these improvements. So this item doesn’t depend on my availability but on my husband’s, and he’s pretty busy right now doing other work. We’d need a really big commission for him to work on NarraFirma again. The software is stable, but it could be even better. That’s something we’d love to revisit someday.

If there is anything you would like to see in NarraFirma’s future, please let me know. I charge half my normal consulting rate for software commissions (though I do usually let commissions bunch up until I get enough to plunge into the software for a month or two, because it takes a while to get my bearings). I very much want to keep NarraFirma alive, relevant, and useful. Again, my thanks to everyone who helped out with the new version.

Release 1.1.0

Version 1.1.0 of NarraFirma adds two new ways to get your data out of NarraFirma.

First, in the survey, participants can see and copy a summary of their submitted stories (and you can control whether people see this or not).

Second, in the application, you can print an HTML project report that summarizes everything you typed into NarraFirma (for use in other software).

If you have an existing NarraFirma installation and need help upgrading it to the new version, check our installation page for instructions.