Vodorians celebrated some great news during this snowy and brisk Chicago week. Our small, but nimble company was ranked No. 15 on the Brill Street + Company Top 50 Employers for Gen Y Emerging Talent in Chicago.
We are honored to be in such good company with a number of Chicago tech firms who are getting recognized for cultivating a new generation of business and technology leaders.
Even though Brill can say it better than we can about why it’s great to work at Vodori, I urge you to check out these blog posts to learn more about life as a Vodorian:
This wristband from the makers of Fitbit spots trends in health and fitness, such as sleep efficiency, weight and movement. We love how sleek it is, and we also enjoy trying to beat our co-workers in the weekly step count.
These nicely designed earbuds are as useful for a scheduled conference call with a client as they are during a jam session at one’s desk. And with the smart StayHear® tips, they stay in the ears while perfecting sweet chair moves.
Get that special data geek something unique and very personal. This personal DNA test looks at one’s 23 pairs of chromosomes and reveals what percent of that DNA comes from various populations around the world. Perfect for that person who thinks they know everything about themselves.
Laptop too bulky? iPad not enough? Meet the Samsung Chromebook! It’s compact, lightweight and affordable, which means it’s the perfect in-between machine for the person who can’t decide. We think Goldilocks would approve.
Editors’ Note: This is Part 3 of a four-part gift guide. Return to see our final guide of great gift ideas tomorrow.
Everyone craves a little color now and again. Staring at computer screens or being trapped in endless meetings doesn’t leave much room for inspiration. Here are some great gift ideas to help jump-start creativity and inspire those creative types on your list this year.
Is your favorite creative’s desk lacking energy? Have an office space in need of some color? These specially designed lightweight and interconnected wooden balls can easily be turned and twisted into one’s own creative designs. These interactive art balls are a great way to loosen those fingers and give the brain a stimulating break to get the creative juices pumping.
Made for the playful and the typophile, these Helveticards are a beautiful alternative to today’s ubiquitous French sets. These playing cards are decked out in the CMYK color model, providing a refreshing and modern take on the classic design.
Regardless of one’s affinity for typeforms or craving for cleanliness, these towels can meet both of those needs. House Industries developed these flour sack tea towels to fashionably keep one spill-free and design-friendly.
Pencil is the most natural and expressive tool for getting ideas on Paper (the iPad App). This tool blends advanced technology with beautiful design to keep a designer in the creative flow without having to switch out tools. Pencil’s features, like erasing, blending and adaptive palm rejection, let a designer do what they do best: create. It’s available in two beautiful finishes.
On the lookout for eye-catching color and cell phone protection? These high-gloss, durable hard-shell Pantone Universe iPhone 5 cases are available in 12 brilliant colors to meet both of those needs. We also recommend checking out the Pantone Universe site for a myriad of other brightly colored products.
Editors’ Note: This is Part 2 of a four-part gift guide. Return to see our favorite gift ideas for designers tomorrow.
Alas, it’s that time of year again where you may be struggling to get your favorite business person something unique. Never fear, the Vodori strategy team is here to help you out. Here’s our gift picks for any marketer or strategy-minded individual on your “nice” list.
Can it get any lighter or thinner? Indeed, it can. This 1-pound, ultra-thin iPad Air can help any business traveler complete work, watch movies and play video games all in one device, while making sure their luggage stays below the weight limit.
For the multi-tasker who enjoys listening to sweet tunes while working, check out the Sonos PLAY 1. This wireless speaker not only delivers crisp and clear sound, but allows anyone to easily control their music from their smartphone, courtesy of the SONOS Controller App.
Yes, there are times when we are at a business meeting and are thinking, “If only we had a projector…” Your favorite marketer will never have to wonder “what if” when you get them this pocket-sized HD projector. Have them impress their colleagues with this nifty device or get them to host the next movie night at their home.
Help a busy person keep organized by buying them the Nimbus, a personalized dashboard that pulls news and information from a smartphone, including emails, calendar appointment reminders and weather updates. This is perfect for someone who hates constantly checking their phone but still wants to stay up-to-date.
Editors’ Note: This is Part 1 of a four-part gift guide. Return to see our favorite gift ideas for marketers tomorrow.
If you are not a developer and your iPhone is the most tech-savvy gadget you have, this guide’s for you. The software engineers at Vodori have perused the Internets to help you find and buy cool gadgets that will impress all of your dev friends.
Raspberry Pi is the smallest, most compact computer on the market. Perfect for developers, this credit-card sized computer board just needs to connect to a few components in order to make it run. If you’re looking for something a bit more technical, we also recommend Arduino, which will have your hardware-loving friend tinkering around with circuits for a good while.
Snacking and coding are a match made in heaven. So get this washable keyboard for the snack junkie techie in your life. This keyboard can be fully dipped in water and washed clean of all the chips and skin cells which your friend has left ages if not eons ago.
Who wants a desk full of wires? No one. But if your developer still can’t avoid having cables or is a traditional hardwire geek, these clips will save them from the wiring mess that is a modern computer station.
With bicycle injuries on the rise, this laser light projects a bicyclist's own bike lane onto the streets so that vehicles can adjust to the space needed for his or her bicycle. Now there’s no need to bob and weave in traffic.
After washing the keyboard hooked to the mini computer by cable clips, your favorite developer bikes home with their laser light lane and does what? Help them relax by giving them a portable ping pong set. A healthy life is a good balance of work and play, and this item is a good way to unwind from work with whomever is at the receiving end of their killer ace.
A few weekends ago I was out with some friends and I used the term “Scrum Master” in a story I was telling. Not surprisingly, I was met with blank stares. “What is a Scrum Master?” isn’t a question that you hear at Vodori very often these days. After working on multiple Agile projects at Vodori, it is easy to forget that the general population is not as plugged into the sometimes quirky Agile lingo. So here’s my attempt to explain more about what Agile means and how it works for our company.
What Is Agile?
Agile is a software development methodology that rethinks the typical project approach. Rather than long “waterfall” projects, Agile teams deliver deployable code and other deliverables on a frequent basis – typically over two to four week “sprints.” Agile also shuns excessive documentation in favor of frequent, in-person communications that seek to maximize business value. The scope for the sprints is predefined and fixed. Essentially, Agile provides short durations of focused work that deliver usable functionality to the clients on a frequent basis.
So back to that Scrum Master question. The Scrum Master is the person on the Agile team who ensures that the team adheres to the proper Agile rules, keeps the team solely focused on the sprint goals, and adds any new requests to a backlog that will be revisited after the sprint.
Vodori ‘s Adoption of Agile
Vodori has been very proactive at educating interested Vodorians in all things Agile. One of the best experiences I have had in my professional career was an intensive, three-day Agile training session, in which we learned the core fundamentals of Agile and performed project simulations. Attendees varied by discipline, level, and knowledge of Agile, which led to some enlightening conversations about Vodori's future use of this methodology. The entire training experience is a reflection of Vodori's commitment to continuous improvement of its processes.
Vodori has seen some major successes with the Agile process and I would wager that there are many more to come. The success is largely due to the interactive client-project team relationship that Agile demands. The incremental delivery of new functionality allows for frequent client check-ins to ensure that the end deliverable best meets the client’s business needs. It is a great methodology to ensure that the client and project team always have their finger on the pulse of the project.
Taking our Agile learning one step further, Vodori is hosting weekly “Agile In Action” meetings. During these meetings, one of our Agile project teams take a deeper dive on a specific topic relating to the methodology, answering questions and listening to feedback from other Vodorians. Despite being held late on Friday afternoons, the great turnout for these standing-room only talks shows Vodorians’ enthusiasm for Agile projects.
What I’ve Learned from Agile
I have really enjoyed learning about the Agile process and strongly suggest that future project teams consider it (or some variation) for future engagements. That being said, I will be the first to admit that Agile isn’t for everyone and that Agile isn’t absolute. While it can be beneficial to follow the Scrum rules to a T, I would use the first few sprints of a project to test the waters and find what works for the team.
Another key takeaway to think about when implementing Agile is group dynamics. The Tuckman’s Group Development Model discusses the four primary team dynamics to deliver results: Forming, Storming, Norming, and Performing. It is important that a team get to the Performing phase to maximize productivity. This is very hard to do with an ever-changing project team, and my experience has shown that consistent teams are far more effective, particularly on an Agile project.
If you are interested in learning more about Agile, I strongly suggest checking out Agile Alliance or poking around the many Agile-related blogs.
Editor’s Note: This blog post originally appeared on the Elasticsearch Blog on Nov. 12.
Two and a half years ago, Vodori set out to redesign its enterprise content management system, Pepper, to deliver high-velocity digital marketing to our customers. With a global scale and complex content management and distribution requirements, Pepper had to be flexible, scalable, and of course, provide rich search capabilities. In 2010, we evaluated technologies that would enable us to meet our product goals and decided on two core technologies: Alfresco and Elasticsearch.
Before diving into our decision to use Elasticsearch, it helps to understand a bit more about some of our requirements.
Content management systems base their data storage on an "object model" or "content model" allowing developers to specify how content types are defined and relate to one another in a system. For example, we might have an object called "Document" that contains properties such as "title" and "filename". We can then extend "Document" with a child object in our object model - a "WebDocument". It has additional properties such as "seoDescription" and "url". "WebDocument" inherits the properties defined on "Document".
Pepper provides an object model as part of the core product but allows (and encourages) implementation teams to extend this model depending on the business requirements for the solution being delivered. Alfresco provides its own “object model” out of box and we extend this concept significantly for Pepper in our searching paradigm. Because project implementations can contain widely varied content types and properties, we have to support the myriad ways our customers may want to search and filter content.
While Alfresco implements CMIS, the industry standard for interacting with content data (creating, updating, searching), the performance did not meet Pepper’s specific needs. Our challenge: how to get content out of Alfresco (and by extension, Pepper) in such a way that:
Implementation teams could write complex queries based on client-specific business requirements
The Pepper team could support more robust control on our searches including sorting, faceting, and paging
We could loosely couple Pepper’s user interface and business logic to the underlying data stores (Alfresco and other relational stores), enabling more elegant evolution of each tier
Enter Elasticsearch. After evaluating a number of technology options, we selected Elasticsearch because it met our requirements and also because of the trust we had in the people and product gained through the successful use of ElasticSearch founder Shay Banon’s previous technology, Compass. By introducing this facade layer on top of Alfresco, we not only introduced a high performance and scalable way to interact with our data, it also gave us complete control of how we search content.
Using Elasticsearch in the Pepper Library
One of the many ways users can find and interact with content is through the Pepper Library.
We allow customers to toggle a number of parametric filters as the results appear through an endless scroll list. Elasticsearch provides everything we need to implement this user experience out of the box.
When users toggle filters along the left panel, we simply construct the appropriate Elasticsearch query using the TermsFilter combined with a BoolFilter and Elasticsearch immediately provides the data we need.
We also provide for free text search by using the search box in the upper right corner of the Library. Thankfully this is also extremely easy to do with Elasticsearch - even when searching with the left panel filters applied. If a user types in a search query, we simply append a Match Query to the existing BoolFilter in our previous query. Elasticsearch happily returns what we asked for. We can further customize the way free-text search works by implementing custom Index and Search analyzers for each property.
Modeling Content in Elasticsearch
One of the challenges we faced when building our architecture was making it easy for product engineering to create content models without worrying about the details of Elasticsearch. Similarly, we wanted to provide a layer of abstraction so that our implementation teams could focus on the client solution and not on the intricacies of Elasticsearch mapping and index creation.
We built a framework that allows us to annotate our Java content object model in such a way that generates Elasticsearch mappings that abstract the complexities from our engineers. Our framework provides the contract between our product API’s and Elasticsearch.
In this example, "logicalName" represents the filename of a document exposed to the end-user which is different than the system generated physical filename we store in Alfresco. With our @ElasticSearchProperty annotation, we can specify the following:
type: This is the field type that Elasticsearch uses to define how this value is indexed
filterable: Whether we want to be able to use Elasticsearch Filters on this value. When set to true, we don’t want to analyze the values.
freeTextSearchable: Whether we want to index the analyzed value for free text searching.
searchAnalyzer: The custom analyzer we use when searching.
indexAnalyzer: The custom analyzer we use when indexing the document.
When using a combination of "filterable" and "freeTextSearchable" we index the value in a "multi_field" type in Elasticsearch so that we can use either the analyzed or non-analyzed value. Our framework is smart enough to know when to use each.
The other Elasticsearch modeling feature we use heavily is Parent/Child relationships. We needed to support the ability to manage and distribute a single document in many different distribution channels (Website, iPad, social media, etc). By leveraging the Parent/Child relationships, we can index a single source document which represents the canonical binary asset and an "index card" that represents a pointer back to the source document with additional descriptor metadata. We can then create additional index card objects in each channel of distribution, all pointing back to the same source document. The index card becomes the parent document with the source document becoming the child document.
Our framework also extends this idea with another annotation on the child source document:
So why would we want to use a parent/child relationship in this way? Among other things, it allows us to write really interesting queries to fetch all content for a distribution channel while also filtering on values in the source document. Let’s look at two examples.
Our customers store product marketing and catalog data within Pepper. As we mentioned earlier, this content is leveraged across many different distribution channels. As a global marketing manager, I may need to search across the entire content ecosystem and find where a particular set of documents are being used. With Elasticsearch and our Parent/Child relationships, we can execute queries that answer this question by leveraging the has_child filter. We simply search for child documents with a specific attribute value (e.g. productCatalogId) and Elasticsearch will return all the parent documents. Parent documents represent our "index card" which is specific to a distribution channel and contains specific usage metadata for that channel.
We also need to be able to serve and query content by distribution channel. For example, when our iPad application, Pepper Mobile, needs to fetch all the content approved for consumption from within the iOS application, we can perform this search using the has_parent filter. In this case, we want to find child "source documents" where the parent object has a specific attribute value such as a distributionChannelId value of 5.
We have a number of new features on our roadmap that will be based on Elasticsearch. A few examples include:
Index Aliasing: This will allow us to rebuild our Elasticsearch Index while the existing index remains in service. Once complete, we can simply update the alias so that Pepper points to the newly rebuilt index. Zero downtime.
Updating Mappings API: Elasticsearch provides capabilities to update its mappings on the fly, which means that when we release new versions of Pepper, it will be smart enough to inspect the current mappings and apply an update to the index based on changes in the Product version requirements.
Distributed Percolator: We are very excited about this 1.0 feature because it will allow us to build a mechanism for our customers to subscribe to content updates in the system and be notified of any kind of relevant changes or compliance issues that they specify. It allows our products to be proactive about what’s going on in the system based on arbitrary business criteria defined by our customers. Very exciting.
The supportive Elasticsearch community
It has been really exciting to see the Elasticsearch product and team grow over the last two years. The Elasticsearch community has been fantastic and really reinforces the fact that we made the right decision on our choice to use Elasticsearch. In fact, we were lucky to host two Chicago Elasticsearch Meetups on Oct. 24 and Nov. 18 with representatives and developers from Elasticsearch and hear from others in the Chicago area on how they use Elasticsearch.
We think that this technology will continue its growth into new industries and applications as more companies realize the power and flexibility of Elasticsearch. We are excited to be a part of that growth.
Test your requirements knowledge with a quick pop quiz.
What percentage of technology projects have a high probability of failure because they don’t deliver what the client expected?
If you chose B, you’re right1—and quite possibly quivering under your desk. But crawl back on up here—there’s hope! Requirements are a critical success factor to turn that high percentage around. When requirements are too vague, we are left to guess at what the client wants, which leads to inefficient and costly work and possible delivery of the wrong solution to the client. Requirements are so key because they ensure that the client is getting what they want in the solution that we are offering.
The qualities of a good requirement
Here at Vodori, we’ve recognized the importance of requirements and have been working toward improving our own process for capturing requirements—in other words, defining requirements for requirements. We define a good requirement as:
Necessary (the requirement is not optional)
Focused (the requirement is not addressing more than one thing)
Consistent (requirement is not at odds with another requirement)
Unambiguous (the requirement is not subject to interpretation)
Verifiable (the requirement can be tested, demonstrated, inspected, and analyzed)
Feasible (the requirement can be implemented within existing constraints)
Traceable (the requirement is documented and appropriately linked)
The role of requirements in the project plan
Requirements come into play throughout all phases of a project. During the define or strategy phase of a project, we meet with the client and determine the scope of the solution and the business requirements. Capturing functional and non-functional requirements comes next, with functional requirements defining specific behaviors or functions of a system (what it will do) and non-functional requirements specifying the criteria that can be used to judge the operation of a system (how it will be). Technical and design specifications then draw on these requirements, defining how they will be met.
Wait, you’re not done yet! Part of defining requirements also includes documenting them in written form. This provides both a clear guide for work to be done and a shared reference for the team, further reducing the chance of an unsuccessful solution. Requirements and even requirements for requirements are never quite complete, but defining and documenting them are key to setting a project up for success. If you’re still not convinced of the importance of requirements, think about it this way: Where would Frodo and the other Hobbits, nay where would Middle Earth be if Gandalf had not put forth this requirement to the demon chasing them, "You shall not pass!"?
Venerated Vodorians. From left to right: Liz Benjamin, Ben Miraski, Staci McNelis, Travis Stom and Peter Winter
Vodori Velociraptors. From left to right: Nicole Holly, Carrie Blood, Conrad Akier, Claire Friedman (not pictured: Tyler Kamigaki)
The Vvinning Vodorians. From left to right: Lindsay Fend, Meghan Palmer, Drew Ryan, Brian Murphey, Billy Stinnette
Viva Vodorians. From left to right: Anne Glista, Rob DeMento, Jesse Gilbert, Mike Kinney, Amy Trang
Four teams of Vodorians returned to the lanes for the 4th Annual Strike Out Cancer bowling event on Oct. 10 at Lucky Strike Lanes in Chicago. Hosted by the Midwest Insurance and the Emerging Leaders Committee, the fundraising event benefits the lifesaving research taking place at City of Hope.
It was a great night filled with good company and friendly but fierce competition. The evening ended with an award for one of the Vodori Velociraptors. Vodori Strategy Analyst Carrie Blood took home the award for highest score, securing that title for Vodori two years in a row (Vodori Content Strategist Amy Trang earned a similar award last year). All in all, I guess you could say we really bowled over the competition.
Thanks to City of Hope for hosting another great event and we look forward to attending again next year!