Skip navigation
All Places > Getting Started > Blog > 2016 > March

I had a co-worker ask if it was possible to restrict list file attachments to just PDF files. After a quick review of the attachment settings in Nintex Forms Designer O365 I was pleased to report the answer as Yes, and so much more! Here is what I discovered about the Nintex Forms file attachment validation settings.


Below are the default settings of the attachment validation section.



Minimum Attachments

Use the Minimum attachments field to specify whether a file attachment is required or not. A value of 0 in the field indicates that file attachments are not required. A value of 1 or more indicates that an attachment is required. Note: Nintex Forms will automatically add the red asterisk (*) to the label when the value of the Minimum attachments field is set to 1 or more.



Minimum Attachments Error Message

You can provide a customized error message to appear if the form is submitted with less than the required number of attached files.


Maximum Attachment Setting

You can specify the maximum number of files to attach to the form. The default drop down is set to unlimited. If you change it to custom, the Maximum attachments field will appear and is set to 100 by default.




Allowed File Formats

The Allowed file formats field is the one that addresses my co-workers question about restricting file attachments to only PFDs. Enter the file extension for every file type you want to accept in this field. Each file type must be on a separate line.



Disallowed File Format Error Message

You can specify a customized error message if a disallowed file is attached. Below is what the validation message looks like in Nintex Forms for O365.



My co-worker was pleased with the numerous file attachment validations options that Nintex Forms offers.

The principle of Continuity states once the eye begins to follow something, it will continue traveling in that direction until it encounters another object.

A good example is a line with an arrow at the end of it. The symbol indicates that the user should follow the line and see where the arrow is pointing. The pointing finger also provides the same functionality. See Figure 1 below.


Figure 1: Symbols to direct the user's eye toward an object.


The Grid Layout

One of the most common examples of continuity in form design is the grid layout. Grids are most useful in bringing order to a layout, but also useful in indicating context. (Source: Andy Rutlage – Gestalt Principles).


Question:  What are you left with when you open a form in Nintex Form designer and clear all of its contents?

Answer: A grid.


As Figure 2 shows, the canvas for all Nintex Form layouts is a grid - small rows and columns of cells used to aid in the layout and placement of objects on a form. 



Figure 2: A Nintex form cleared of all its objects is a grid.


The Horizontal Grid

As Figure 3 shows, horizontal form layout labels are right aligned and floated to left to make them appear on the same line as form controls. Horizontal layouts are best for forms that will be used on desktops, where there is lots of horizontal space.


Figure 3: Horizontal form layout


In Nintex Form Designer (see Figure 4), you will notice that the default Desktop, Tablet, and iPad layouts are all horizontal, as those devices all have more horizontal space to work with.


Figure 4: Nintex Form with Horizontal Layout


The Vertical Grid

The form controls in this layout are stacked with left-aligned labels on the top. (See Figure 5)


Figure 5: Vertical form layout.


As Figure 6 shows, the vertical form layout is best for mobile devices where there is more vertical space to work with. Nintex Forms Designer applies a vertical layout as the default for the Smart Phone and Nintex Mobile Phone layouts.



Figure 6: Default layout for mobile phones


Logical Sequencing of Fields

So far, all examples of the continuity principle have been based on physical attributes – an arrow or finger pointing at another object, a grid of labels and fields arranged in a certain way. However, continuity in good form design can come from the logical grouping of fields who share related content.  For example, when collecting geographic information, not only should the fields be placed on close proximity to each other, they should also be organized by order of scope – from largest to smallest.



Figure 7: Sequencing of fields based on logical continuity


As Figure 7 above shows, Country is the broadest category and is displayed first. A country is made up of multiple states or provinces – placed next on the form. A state or province is made up of multiple cities, which in-turn can have multiple postal codes.



The principle of Continuity states once the eye begins to follow something, it will continue traveling in that direction until it encounters another object. Continuity in good form design can come from both the physical and logical layout of the fields. The physical placement of labels, fields, and buttons in a grid can help users quickly and easily navigate the form. While the logical placement of fields together can help reduce confusion.


Below are links to the other posts in this series.

Applying the Gestalt Design Principles to Form Design

The Gestalt Principle of Proximity

The Gestalt Principle of Similarity


I hope you found this article to be of value. Thanks for reading!


I just discovered that renaming a repeating section on a form is not something that you should do if you already have items submitted into a list. Below is what the repeating section looked like originally.


And this is what was displayed after I changed the name of the repeating section and re-published.




The fix is to change the repeating section back to its original name. After doing that, the contents displayed correctly once again. So, if you (or someone else on your team) renames a repeating section, please be sure to capture its original name before you publish the change.

Better to use a "for each" loop when Possible.


You might be thinking that you need to use a Loop because you're not certain of the number of executions.  You may have a better idea than you think of the number of executions something will take . I will present an example of a Parent/Child Process that utilizes a State Machine to illustrate this in another article.


After some bad examples of Safe Looping Executions times, I determined there had to be a better way.  In a large facility, I wouldn't want to disable Safe Looping because Nintex will be used by a large range of users with different skill levels.  In short, I want the safety provision provided by Safe Looping for the general user population. Infinite Loops can bring a machine to its knees.


I began playing with the "for each" loop for a particular application that I had of creating 30 list records. Since I knew I needed to loop 30 times, I added 30 Numbers to a dummy list.  (The list contained nothing but a number column.)


I, then, used a "Query List" to extract that number items from the dummy list based on the number of iterations I needed. (e.g., if I only needed 20, I would set a condition for the number being less than 21.)  The creation of that same 30 item for a custom list took under a minute. (With 5 minutes a loop in the "Loop" control, the first list took an hour and a half to create 30 items.)


A colleague of mine, Jody Brooks, enhanced this idea by using collections created from the "Regular expression" control seeded by a string.


Jody noticed that in the Nintex "Regular expression" control a string could be split into multiple collection variables.  Take the following string to get the idea "1,2,3,4,5,6,7,8,9,10".  Splitting this using the "," would yield ten collection variables--each containing a number.


A heavenly marriage since the Nintex "for each" loop is designed for collection variables. With the above collection variables, I can iterate through a loop ten times. Also not you can set a Boolean variable to exit the loop early if needed.


Then Jody designed a UDA, User Defined Action, that created a collection of a thousand from with the numbers to 1000 in a single-line text variable punctuated with a comma between each.  This was kind of a pipe wrench approach. I didn't need that many loops and wanted some input as to the length of the collection.


I wanted to create five variable collections for looping: 100, 200, 300, 400, and 500.


The following is my approach for the creation of a UDA called "How Many For Each":



UDA Settings.png


Essentially, a user of UDA enters the FinalCount Parameter. It is not required, so if a value of 200, 300, 400, or 500 is not found the other branch is executed and an array of 100 is returned.


The workflows is essentially a setting a variable, a switch statement with a build string, and a regular expression evaluation.





The build string is essentially a concatenation of the StringtoSplitVariable, which is set in the first step to:



Essentially, the build strings are concatenations of the variable to itself.


Here is the one in the 500 branch, I had to adjust slightly to make it come out to 500 with concatenating 1,1,1,1.  The initial string is only 198 characters long--if I made it 200--this loop ended up being 501--gremlins anyone!


  Build String.png

Let me know if you find a use for this UDA. I'm attaching the code.

Hi Folks,


Are you a veteran (or active duty)?  Want some top notch free online IT training?, a LinkedIn company, is a leading online learning company that helps anyone learn business, software, technology and creative skills to achieve personal and professional goals. I personally have used for years and it is some of the best training content I have ever found. If you are a veteran, is offering 1 YEAR of free access to their library. It is an enormous catalog of training content. This is an amazing offer and I hope that many folks here at Nintex Connect take advantage of it.

To get access, go to the following link:

These folks have great SharePoint training in their library. If you are self taught, this is a great opportunity to fill in any knowledge holes!


Hope this is helpful,


Hello All!


So I have come across some questions and discussions around the out-of-the-box web parts that Nintex provides for reporting and I wanted to dive.

Before we go on this adventure, but sure to check out Enable Reports on your Nintex Workflows by Emily Billing, it will help provide some background!

Also, these web parts are a part of the Enterprise Edition.


Turning On Your Reports

Seems silly, but make sure it is plugged in...

At a minimum you will need to turn on Nintex Workflow and Nintex Workflow Reporting Web Parts at the Site Collection level.

You may want to turn on Nintex Workflow Enterprise Reporting at the Site level so that you can leverage those reports, but for this I will be covering reports that you can show off to users and paint a picture of what they are doing.


Adding Reports To A Page

Once we have everything turned on, we can begin to start using them! I created a page and just started throwing web parts on it!

I recommend that you use something to structure the layout so it is not overwhelming (I just used a table...)!

On your blank page, open it up in edit and Insert a Web Part:


I tend to use more charts than the report viewer only because it is easier for users to consume images rather than the raw data, but I do mix it in for the ones that are more analytical and like to see it (use what makes sense to you and your needs). Once added to your page it is time to configure it, and this is where you will sink most of your time!


Setting Up Your Reports

First you have to decide what you want to report on. Again, check out Emily Billing's post I linked above of an overview of the reports.

I selected 30 Day Usage Summary (all sites).







Next we need to Configure display settings and select a few options (I put what I selected in [BRACKETS]:

  • Chart Type - [Bar]
  • Width - [720]
  • Height - [540]
  • Display Style - [2D]
  • Group Labels by - [Column]
  • Colors - I added one of each of the default colors and applied to the Rows

I also adjust the column settings to show Period and Workflows Started, and have EventDate hidden.

Click Apply and should have something to display how many workflows have been started each day over the past 30 days within that Site Collection (depending on how your db's are setup). Here is mine once all setup:


I setup four charts as a sort of "dashboard" as an overview of what is going on within the one site collection. I created charts for:

  • 30 Usage Summary
  • Workflows By Site
  • Workflow Performance - showing off duration
  • Workflow Performance - showing off the number of instances of each workflow


Here it is in action:


The "Why"

All too often we get these tools and struggle to figure out why we need/should use them and what we can use them for. Here is my thinking...

  • Reports are visual - it puts something that is easily consumable in front of users (or someone) and allows them to glean the information quickly
  • Reports provide facts, not opinions - if you see a spike in duration, you can quickly pinpoint where the problem is and how to isolate it, or if a workflow is used 75% out of all usage (as like the one I have), you can make the case to spend more time/resources to improve it or understand how important it is
  • Reports are always watching... - if someone is asking about long running instances or wants to know what is pending/errored out/canceled/etc, you can pull that quickly and know that it is accurate and up-to-date


I personally use the reports to help guide our efforts and decisions towards the important areas, rather than the vocal minority. We can provide these insights to our business areas and let them see how things are performing, how long workflows are taking, what/who is a bottleneck or unneeded step. Ultimately, it provides us the tools and facts to stand on when asked questions in regards to our workflows!


Hope this provided some insight to Nintex Report web parts and please feel free to let us know what you are using it for. I am eager to see if anyone has augmented the XML behind these or created their own custom report(s).


Until next time!

This is the third post in my series about the Gestalt Principles as relates to form design. In this post I talk about the Gestalt Principle of Similarity. Of all the Gestalt principles, the principle of similarity is probably the easiest to understand. It states that elements within an assortment of objects are perceptually grouped together if they are similar to each other. To put it in simpler terms, things that are similar are perceived to be more related than those that are dissimilar.


Think Twins!!

I am an identical twin, so I completely understand this principle as I have been living it all my life. The most memorable question ever asked of my brother and me was “Are you all twins or brothers?” Our answer was always “Yes.”


As Figure 1 shows, similarity can occur in the form of size, color, shape, shading or other qualities.

Figure 1:The Similarity Variances of Share, Size, and Color Source: Interactive Design Foundation


Let’s take a look at the star diagram that we used to help describe proximity. Is there anything that immediately captures your attention?


What do you notice first - rows, columns, the two blue stars, or the 14 gray stars?


Figure 2: Similarity of color helps the user focus on a specific area.


A few areas on forms where the similarity principle comes into play are, but not limited to, labels, buttons, and fields.



As Figure 3 demonstrates, all field labels should maintain similar formatting throughout the form. You don’t want to have some labels that are left aligned, some right, aligned, and some center aligned. Pick and alignment and stick with it. Similarity can also be achieved by using generally accepted design elements in your form design. For example, the red asterisk (*) is commonly used to identify a required field. Don’t be creative and use another character or color to identify required fields – it just does not work. Note: Nintex Forms is programmed to automatically place the * in the label when a field in the SharePoint list is marked as required.formLabelAlignment.jpg

       Figure 3: Similarity of label alignment and of special markings.



All buttons should be of similar appearance. What about the placement of the Save and Cancel buttons? Should the order be SAVE CANCEL or CANCEL SAVE? What do you think? Which do you prefer?


        Figure 4: Order of Save and Cancel buttons

The correct answer is that there is no correct answer. Read the following quote from the Nielson Norman Group.

“In cases like this, it often doesn't matter what you do. Either choice has good arguments in its favor, and no choice is likely to cause usability catastrophes. It might save some users 0.1 seconds if you pick the "right" choice for certain circumstances, but it's simply not worth it to conduct sufficiently elaborate research to find out what that choice is.”


A particular element can be emphasized when it's dissimilar, breaking the pattern of similarity. This effect is called an anomaly. Highlighting a selected field is an example of an anomaly. In Figure 5 below, the form fields have been modified to highlight when selected. The dissimilar field is the active field.


Figure 5: Breaking the pattern of similarity to emphasize an element.


So that’s it for the principle of similarity. For further reading on this topic I suggest the following article:


Below are links to the other posts in this series.

Applying the Gestalt Design Principles to Form Design

The Gestalt Principle of Proximity

The Gestalt Principle of Continuity


I hope you found this article to be of value. Thanks for reading!


Form Rules Based on Form Mode

Posted by mmatsako Champion Mar 22, 2016

Have you ever wanted to create a Form Rule based on whether or not your form was in New, Edit, or Display mode respectively?  It turns out you can do exactly that without too much effort.  In this example I will show you how to create a Validation Rule to throw an error on the form if the user selects a date that is in the past, but only while the form is in New mode. Let's jump right in!


First create your form and drag a date picker control onto the design surface: in this case we'll name it EndDate.


Next let's add a Validation Rule to the EndDate control as depicted in the following:


By using the formula builder (next to the condition box) I was able to select "Is New Mode" from the Common tab.   "Is New Mode" return true if the form is in New mode and false otherwise. "Is Display Mode" and "Is Edit Mode" are also available under the Common tab.


We complete the rule by checking if "EndDate" is less than "Current Date".


Note: EndDate was selected from Named Controls tab and Current Date was selected from Common Tab in the formula builder, respectively.


Here is the entire rule: (Is New Mode) && (EndDate < Current Date )


We can read this as   IF the form is in New mode AND the EndDate control has a date prior to the Current Date then throw a validation error message.


Test the rule by selecting a date in the past while in New mode and you will end up with something like this:


Next open the form in "Edit" mode by selecting an existing list item and you'll be able to choose whatever EndDate you will like without receiving a Validation error.


This is good stuff, no doubt - and allows you to make edits to existing items in Edit mode where the EndDate would otherwise be considered a "past" date and restricted by the rule.   You can disable the EndDate control on the form while in Edit mode by applying an "Expression" under the Appearance section of the EndDate control's configuration page.


With Nintex Forms you really can have the best of both worlds.   Until next time!


Scavenger Hunt (Re-post)

Posted by kelliganp Mar 22, 2016

Tasks don’t care if you have to use five products to accomplish them. It’s not their job to care. It’s their job to stare at you until you’re done with them. And so many of the tasks we do — the majority, easily — require us to bounce from one piece of software to another before we’re done with them.


Have you seen the Mike Fitzmaurice 's article on the Workflow magazine ?


Download the pdf version >>> Workflow Magazine March 2016

Found this picture I took at InspireX and shared with my team and wanted to share it with you!


I recently started to expand our training to involve our Business Analysts so that they can assist in getting other areas on board with Nintex. I use this image (and phrase) throughout as it drives home the idea that Nintex does not require you to be a technical savant and code solutions.  It empowers users to see and hear this as it removes the notions that it is too complex or difficult to do themselves, and once they see how easy it is to demo, that is when I see all the gears starting to move about their ideas and what they want to automate!


Work Smarter Not Harder.JPG


So what else do you guys use in your trainings? I am putting together a training packet and will most likely share it once I have it completed to get some feedback!

The idea of a "dashboard" comes up a lot and for me, I generally cringe at the thought. Not because it is difficult to implement, but because it is difficult to implement well enough so that the customer uses it frequently enough to get value out of it.



I recently had to deal with such a case with an internal customer where they wanted a form to be submitted on a child site and then certain pieces be promoted up to a parent site list upon submission. So how do we accomplish this? I used Web Services within a Site Collection workflow that is triggered by a content type. Simple enough, but requires a bit of knowledge in regards to what is expected and what to look for (a lot of trial and error )



I am not going to go into too much detail about Content Types, but I recommend knowing how to use Content Types and how to apply workflows to them. Perhaps that will be another blog for another day. This is what I am working with:


Master List on Parent Site - this list is used to build views from data that is coming from multiple child sites. Here is where you want to define the columns you want to write to and how you want to build your views/dashboard. I added columns to mine so that I can match records based on project name and ID. This allows everything to be in one location, but sometimes you need to separate out data, so do what makes sense to you.


Forms Library with specific Content Type on Child Site - this library will be where the form is submitted to and certain columns are promoted out. I used InfoPath for this only because I cannot figure out how to promote out columns to a library using Nintex Forms! If you do know or have any thoughts/ideas on this, please let me know in my question Promote form controls to another list. In regards to the content type, it is empty (there are no site columns associated to it), as we are leveraging it so we can easily identify content as it is being added to multiple sites.


Site Collection Workflow - this workflow will trigger anytime something new is created with the specific Content Type. This is the "man behind the curtain"; the one that does all the heavy lifting!






The Process:

The overall flow of this process is simple enough; a user fills out a status report and submits it to a library. The workflow is triggered (because of the content type) and then interrogates it to get additional data to push up to the master list. So lets dive into the workflow actions!


The Workflow:

First let's open up the first action set. Ultimately, we need to query the library for the data we want, but before we do that we need to know how to do that.

We can use the web service action and call the GetListItems method from ..../lists.asmx. We will need to feed it a few items at a minimum:

List Name

You could use a variable here if you want to leverage this for multiple list updates

Query (XML)

What item(s) are you going after? For this example I am going after the Current Item so I can use the ID like this:

View Fields (XML)

What fields do you want back? Simple enough, but be careful of what the columns are named as the internal name may be different than the display name (wasted a lot of time figuring that out!). Here is what I am using:

Query Options (XML)

How you want it displayed. I do not use anything here, but still need to pass in something. I added a build string action in the event that something needs added later I have something in place already. So for now I am using:


Once this all gets packaged up in XML and saved into workflow variables, simple add them into the Web Service action and save the the result set!

But now all we have is a bunch of XML data, so what's next? If you are thinking coffee then go get some! If you are thinking Query XML you nailed it!

With the result set we can pick out the specific data that we want to use and push up. This can be tricky if you are not familiar with using XPath but there are plenty of examples that you can follow such as How to extract output values from SOAP response message with Query XML action? or Dictionary Part 2 - Query XML results into a Dictionary. I generally have to lookup the exact XPath Syntax and reference that site often.


Once you have a handle on that you can add an output for each point you want to grab like so:


Almost there! We queried the library for the item and grabbed the data. We parsed through the data to get it into a format that we can leverage. Now we just need to update the Master List. Call another Web Service!

Just like before, we need to know how to feed the web service so we are updating the right item. This time since we are updating it is pretty straightforward; need the list name and updates.

List Name

You could use a variable here if you want to leverage this for multiple list updates

Updates (XML)

The updates to be made on the target list. Here is what I am doing:

I am finding the specific item to update and then pushing in the variables that I captured from the XML.


There are other Cmd's that can be used such as New and Delete if you needed to add a new record or delete something rather than updating it. I would recommend good 'ol MSDN for more information.






Final Thoughts

With everything in place, we can now have users submit a form to a library on a child site, and have specific columns be promoted out of the of the form and up to the master list on the parent site.

This allows us to build views for dashboards so that (in our case) executives can see, at a glance, the status of all projects from a central location.

With this workflow, we can also add in notification steps if needed, or even updates to other locations. Most importantly, because it is being triggered on a content type, we can apply this content type other places within the site collection and be tied into this workflow with almost zero effort!


Please let me know what your thoughts are on moving content around and out of sites and how you have leveraged web services!


Until next time!

Have you received some weird in-box messages about old discussions?

Here's why:  We are performing a necessary update to our databases, and the effort will re-mark some "correct answers" that were lost in a recent merge of content in the community. That means you may get  in-box notifications about things you already got notified about. I apologize for any inconvenience or confusion. If you want, you have the option of temporarily un-following spaces, documents, people, discussions, etc to avoid these in-box messages.

Here's how:

First, click your avatar in the upper-right and select "Your Profile." When you're there you'll see your "connections."  Click "following" as pictured below.



When you get to the next page, you'll see all the people and things you follow.  Click "Following" and then you'll see an option to "unfollow."  Click that and you won't get those in-box messages. 


But remember to re-follow again tomorrow!


One other aspect of this effort will change the timestamp on the original question.  It will be re-stamped to the date the data was updated.  That will make it appear as though community member answered questions even before they were asked!  See this image?



I know you guys are good, but that would be amazing!


In the end, we will recover hundreds of correct answers, which benefits the community greatly. It will mean hundreds of correct answers are restored and that could mean thousands of people find them and get help.

Again, apologies if you are confused by the in-box messages.  And thanks for your understanding!

This is the second post in my series about the Gestalt Principles as relates to form design. The introductory post can be found here. In this post I talk about the Gestalt Principle of Proximity. Proximity is all about whitespace - the area of blank canvas between objects. To me, whitespace is one of the most important elements of good form design, as the good use of whitespace makes a form look clean and easy to use.


Principle of Proximity

The principle of Proximity states that when an individual perceives an assortment of objects they perceive objects that are close to each other as forming a group. In Figure 1 below, the stars on the left are grouped closer together horizontally, so we tend to first see them grouped as rows. While the stars on the right are closer together vertically, so we tend to first see them as grouped in columns.



Figure 1: Proximity: Items that are close together appear to be grouped.


The principle of Proximity relates to forms in many ways from placing related fields close to each other or away from other content to aligning a label with its field.

In Figure 2 below, you can see two groups of fields. The first group captures information about the user, the second group captures the user’s feelings towards a certain topic. The proximity of the fields to each other shows relation. Those that are close to each other are related and those that are away from each other are not related.



Figure 2: The three text fields appear to form a separate group from the option button group.


In the next set of images, you see several different alignment layouts between the labels and their related fields. In Figure 3, the labels are left aligned. Notice the amount of white space between the label and the field. Some users might not associate the label with its control. In Figures 4 and 5, the labels are right aligned and top aligned. As you can see, the labels are close to the fields and more likely to be perceived as being related. In Figure 5, the labels could be placed even closer to their fields to make it even clearer that they are related. And finally, in Figure 6, the label is included in the field itself, providing little question as to what content goes in the field.



Figure 3: Left aligned labels. Could appear to the user as being unrelated to the text fields to the right.



Figure 4: Right aligned labels. Are closer to the text fields and visually appear to be related.



Figure 5: Top aligned labels are closer to the text fields and appear to be related.



Figure 6: Labels in the text field provide no question as to what information belongs there.


So that’s it for the principle of Proximity. I hope you found this article helpful. Feel free to reach out to me with comments or suggestions on how I can improve this series. I am relatively new to blogging, so I am open to helpful suggestions.


Next up I will discuss the The Gestalt Principle of Similarity.


Other posts in this series:

Applying the Gestalt Design Principles to Form Design

The Gestalt Principle of Continuity


Using the Twitter Action

Posted by deanvirag Champion Mar 7, 2016

So I just uploaded a How-To file on using the Twitter action.


But, what good is a How-To document without some details on Why you would want to use the Twitter Action? So, here are two quick thoughts..


  1. Your company sets up a central location to control all outgoing tweets from the corporate twitter account. Set up a simple workflow on a custom Corporate Tweet list list that runs every time an item is added to the list.
  2. You company sets up a workflow to automatically post to their Wordpress blog (Using the Wordpress action!) To complete the posting process, they want to Tweet out that a new blog post was uploaded, but only after waiting for a certien period of time to make sure that everything with the blog is in order first.


I really like the Twitter action and hope that you will get value from using it as well.

I have been creating form and workflow solutions since 2010. And, for a period between 2011 and 2012, that all I did for a small non-profit company. Today, I often cringe when I have to go back and look at the design layouts of my earliest forms. They were functional, but not very pretty. Fortunately, my sense of design has evolved over the years. Experience has taught me what works and what does not work, what looks good and what does not. Recently, I started studying user interface design as part of attempt to better understand the concept of user experience. During my readings I came across a book that described the Gestalt Design Principles and how they related to user interface design. These “descriptive” principles validated many of the design principles that I was already doing. They also opened my eyes to other possibilities in form design.

In this series of blog posts, I will describe seven Gestalt design principles and show how they relate to form design. The final article will talk about combining the principles. I am hoping that this series will provide you with some insight into good form design or validate what you have already been doing.


What are the Gestalt Design Principles?

The following excerpt is from the book, Designing with the Mind in Mind, by Morgan Kaufmann Publishers 2010. It offers a brief history of the Gestalt Design Principles.

Early in the twentieth century, a group of German psychologists sought to explain how human visual perception works. The conducted experiments, observed, and recorded many visual phenomena. One of their basic findings is that human vision is holistic – that is our visual system automatically imposes structure on visual input and is wired to see whole shapes, figures, and objects rather than disconnected lines, edges, and areas. The German word for “shape” or “figure” is Gestalt, so these theories became known as the Gestalt theories of visual perception. 

There are seven principles that apply to form design. They are proximity, similarity, continuity, closure, symmetry, figure/ground, and common fate. In upcoming articles, I will describe each of these principles and provide examples of how they relate to good form design.


The next article in this series is about the principle of Proximity.

It always pains me to see a company’s investment in software go to waste. I have seen some very expensive software just “sit of the shelf and collect dust” because staff are either unaware of its existence or have no idea what it does, or how it can be used. As a technical trainer, I have always made it one of my primary responsibilities to make sure that staff are aware of the tools that are available to them and also how the tools can be used to make their work lives better. This short article features some of the activities and attitudes that I have used in the past to help increase awareness and adoption of software at companies where I have worked.


I have found Lunch & Learns to be one of the most effective activities to introduce a large group of people to a new or unknown software product – especially when I was the one supplying the lunch. At a non-profit that I work for years ago, I was lucky enough to have a modest food budget that afforded me the ability to provide some very tasty (but inexpensive) lunches at my presentations. My sessions were always sold out. I believe it was the food that first attracted my audience, but it was the content that kept them coming back – at least that what I wanted to believe.


My “template” was the same every time – 1) to understand the software, 2) to understand the pain points of my audience, and 3) to offer example solutions. I rarely ever demonstrated the “how to” aspects of the software, unless it was to show “how easy” it was to use compared to a current product. More often I chose to focus on the “why to” aspects of software, answering the question “What can this software do for me?”


I also made it my business to understand the business of my co-workers. I would often scan the signup list and gather intelligence about my audience – what were their job responsibilities, what tools did they use, how did they work, and who did they work with?  Empowered with that knowledge, I was able to craft relevant and timely examples in my presentations that would “speak directly” to my audience. After the lunch & learn ended, I would often have conversations like “I am dealing with that exact issue right now and that software seems like it will really help me. Can we meet later to talk about it?”




Using this template, I successfully introduced the concepts of automating processes with forms and workflows, creating stunning presentations using Prezi instead of PowerPoint, using OneNote for team collaboration, and much more. My efforts were positively recognized by IT leadership and always appreciated by my well informed – and well fed audience.

Recently the topic of a state machine came up with Sean Docherty. I wanted to put thoughts to paper so that I can share my experience with the community and see what others view points are.


The Scenario

In this example I am creating a workflow for a software acquisitions process. Below is a high level view of the steps taken:

1. The user fills out a basic form requesting software

2. The planning team updates the form with the PRODUCT ID

     a. The workflow checks to see if it has been CANCELLED

3. A task is generated for the requester's supervisor to approve

     a. If approved, the planning team schedules an INSTALL date and completes the request

     b. If denied, the requester is notified with details on why

     c. If no action is taken with 24 hours, the request is automatically cancelled


For the sake of this post I am going to keep the form piece of it out and focus on the workflow that is driving the process.


The Workflow



The workflow is setup to trigger when a NEW item is submitted. Upon entry, the item enters the state machine in the NEW branch and waits for someone from the planning team to select a PRODUCT ID from the company catalog. We also check to see if the status is 'Cancelled' just in case someone cancels the request prior to requesting approval. The workflow then moves over to the PENDING branch. Here is where the task is generated and requests supervisor action. There is three possible outcomes:

     1. Approve - The supervisor approves the request and moves the workflow into the APPROVED state.

     2. Reject - The supervisor rejects the request and moves the workflow into the DENIED state.

     3. If no action is take within 24 hours, the task is escalated and automatically completed and moved into the CANCELLED state.


If the request is approved, the workflow waits for someone from the planning team to update the request with the date for the software install. At this point, the workflow finishes and the request has been completed. If denied, the requester is notified with details regarding why, and the workflow finishes. Lastly, if the request is cancelled due to inactivity, the requester is notified and provided explanation on why and what to do if wanting to re-submit. This is accomplished buy using the Escalation part of the Flexi Task action (see below).



Additional Thoughts

I try to use a State Machine in my workflows when an item has a life-cycle that is short and needs to be monitored. I look for short life-span so that I do not have workflows running for extended periods of time. Also, for this example, because we are updating the 'status' of the item with each new state, we can build a view within SharePoint that provides an up-to-date look at what is coming in, being worked on, and at what stage it is in. I am also attempting to leverage more of the 'Expected Duration' piece of the actions I use and monitor where things bottleneck or take almost no time. To do this, simply look in the Common section of the action and select a duration.


As always, there are many different ways that this could have been accomplished; you could use a switch action and evaluate the status each time or you could make the entire thing linear. I choose to use a state machine because it allows me to see what state an item is in at any moment and it provides me greater opportunity when I go back and automate more. For example, I would create a process that looks up the available products from the catalog and picks an open license or notify the planning team that a purchase is required (a whole new process). This step could easily be injected into the current workflow under the NEW state and not disrupt or require redesign.


Please, let me know what you think or what you have experienced regarding state machines!


Until next time!

Filter Blog

By date: By tag: