<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-4581798799371107152</id><updated>2019-12-10T09:51:24.873-05:00</updated><category term="selection"/><category term="development"/><category term="Content Strategy"/><category term="Global Marketing Operations"/><category term="architecture"/><category term="Content Management Assessment"/><category term="Product Management"/><category term="drupal"/><category term="commentary"/><category term="localization"/><category term="Web Operations"/><category term="open source"/><category term="announcement"/><category term="social networking"/><category term="conference"/><category term="recruiting"/><category term="collaboration"/><category term="Content Modeling"/><category term="django"/><category term="wordpress"/><category term="Scenarios"/><category term="agile"/><category term="management"/><category term="Web2.0"/><category term="alfresco"/><category term="demo"/><category term="off-topic"/><category term="personalization"/><category term="publishers"/><category term="usability"/><category term="DevOps"/><category term="Feature Request"/><category term="Knowledge Management"/><category term="RFP"/><category term="SEO"/><category term="design"/><category term="eZ Publish"/><category term="hippo"/><category term="intranet"/><category term="magnolia"/><category term="mobile"/><category term="newsmedia"/><category term="simplicity"/><category term="Technical Strategy"/><category term="community"/><category term="daisy"/><category term="workflow"/><category term="Apple"/><category term="Translation Proxy"/><category term="cloud"/><category term="jcr"/><category term="plone"/><category term="reports"/><category term="security"/><category term="standards"/><category term="wiki"/><category term="Social Business"/><category term="blogging"/><category term="browsers"/><category term="business"/><category term="email"/><category term="fieldguide"/><category term="google"/><category term="php"/><category term="productivity"/><category term="python"/><category term="search"/><category term="sharepoint"/><category term="training"/><category term="tricks"/><category term="Digital Asset Management"/><category term="Engagement"/><category term="Infrastructure"/><category term="OSX"/><category term="PaaS"/><category term="Project Management"/><category term="analysts"/><category term="assessment"/><category term="book review"/><category term="cmis"/><category term="cmpros"/><category term="compliance"/><category term="cto-blog"/><category term="data science"/><category term="day"/><category term="ereader"/><category term="jahia"/><category term="java"/><category term="joomla"/><category term="microsoft"/><category term="nosql"/><category term="nuxeo"/><category term="opencms"/><category term="portal"/><category term="pricing"/><category term="review"/><category term="typo3"/><title type='text'>Enter Content Here</title><subtitle type='html'>Where content meets technology</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='https://www.contenthere.net/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/4581798799371107152/posts/default'/><link rel='alternate' type='text/html' href='https://www.contenthere.net/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='https://www.blogger.com/feeds/4581798799371107152/posts/default?start-index=26&amp;max-results=25'/><author><name>Seth Gottlieb</name><uri>http://www.blogger.com/profile/01233710343214501624</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>729</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4581798799371107152.post-5725978235922468612</id><published>2019-12-09T16:10:00.000-05:00</published><updated>2019-12-10T09:51:24.803-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Product Management"/><title type='text'>Hot Lots</title><content type='html'>&lt;p&gt;When I start working with an established software development team, my favorite tool for understanding their process is a &quot;hot lot.&quot; Hot lot is a manufacturing term where an order is expedited by being allowed to jump the queue. Hot lots are closely watched for progress and potential delays. In the world of software development, a hot lot can be a feature request that goes through a process of design, implementation, testing, enablement (documentation), release, promotion, and evaluation. A hot lot should accelerate the process by adjusting priorities but it should not circumvent the process by breaking rules or cutting corners.  &lt;/p&gt;&lt;p&gt;By prioritizing a feature and watching it go through the process at top speed, you can learn many things. For example, you can learn...&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Whether the process is even responsive enough to accept a hot lot. Sometimes engineering is tied to rigid roadmaps and nothing, no matter how important, can jump the line. This is concerning if those roadmaps stretch out beyond the opportunities you can reliably anticipate.&lt;/li&gt;&lt;li&gt;Whether there even is a defined process. Is there a mechanism for ensuring all of the tasks (qa, documentation, deployment, etc.) are completed? Or maybe there is a process but nobody follows it. If there is no practiced process, you can&#39;t trust the integrity of the system or whether anything is really &quot;done.&quot;&lt;/li&gt;&lt;li&gt;How the process is structured into steps, roles, and hand-offs. How many people touch the feature? How much time does each step take? How much time is spent waiting between steps? Is there excessive back and forth? Lean Six Sigma has a great framework for studying process cycle time, wait times, and waste across the value stream. &lt;/li&gt;&lt;li&gt;The theoretical speed limit of the current process. You will never know how responsive your process can be when you always slow it down with competing priorities. Often actual speed is much slower than potential speed because of various delays, distractions, and interruptions that are not the fault of the process.&lt;/li&gt;&lt;li&gt;Whether there are structural blockers like &quot;we only release every 3 months.&quot; Or maybe the team is distributed over many time zones with little overlap for hand-offs and feedback.&lt;/li&gt;&lt;li&gt;Whether there are capacity blocks like &quot;Joe is the only person who can do that step and he is not available.&quot;&lt;/li&gt;&lt;li&gt;How easy it is to monitor the process. Can you go to one place and see the completed and remaining work?&lt;/li&gt;&lt;li&gt;The amount of managerial overhead that the process requires. For example, is there a project manager that needs to track and delegate every task?&lt;/li&gt;&lt;li&gt;The artifacts the process creates. Can you go back and see what was done and why?&lt;/li&gt;&lt;li&gt;How the response to the feature was measured and incorporated into future improvement ideas.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;After running through a couple of these experiments, I have a pretty good understanding of the process structure, its theoretical speed, its strengths, and its flaws. At that point, we can start to come up with ideas for improvement. The low hanging fruit is usually pretty obvious ... especially to people who have been participating in the process but not paying attention to the overall throughput. Optimizations can be designed collaboratively and tested by future hot lots. I find that teams are generally comfortable with this evaluation because it doesn&#39;t target people as much as the framework that people work in. Usually processes (at least as they are practiced) form organically so nobody feels threatened by process improvements -- especially if they are clearly supported by empirical evidence.&lt;/p&gt;&lt;p&gt;Even if you have been working with a team for a while, try pushing through a hot lot and pay close attention to it. There is really no better way to understand the execution of a process.&lt;/p&gt;   </content><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/4581798799371107152/posts/default/5725978235922468612'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/4581798799371107152/posts/default/5725978235922468612'/><link rel='alternate' type='text/html' href='https://www.contenthere.net/2019/12/hot-lots.html' title='Hot Lots'/><author><name>Seth Gottlieb</name><uri>http://www.blogger.com/profile/01233710343214501624</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-4581798799371107152.post-728241239264808894</id><published>2019-11-07T08:58:00.001-05:00</published><updated>2019-11-08T07:42:24.301-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Product Management"/><title type='text'>What problem are we solving?</title><content type='html'>&lt;p&gt;&lt;p&gt;Before building any functionality, a product team should first start by fully understanding the problem they are being asked to solve. This may sound obvious but I can&amp;#8217;t tell you how many times I see one-liner Jira tickets that ask for something without explaining why. But the &amp;#8220;why&amp;#8221; is the most important part for a number of reasons.&lt;p&gt;&lt;ol&gt;&lt;li&gt;The team has to agree that the problem exists and is worth solving. The impact and urgency is a primary factor in prioritization.&lt;/li&gt;&lt;li&gt;Being grounded in the &amp;#8220;why&amp;#8221; informs creativity to answer the &amp;#8220;what&amp;#8221; and the &amp;#8220;how.&amp;#8221; &lt;a href=&quot;https://www.interaction-design.org/literature/article/design-thinking-getting-started-with-empathy&quot;&gt;Design begins with empathy&lt;/a&gt; and you can&amp;#8217;t have empathy if you don&amp;#8217;t know what your users are struggling with.&lt;/li&gt;&lt;li&gt;Solutions should be evaluated on how well they address the problem. This evaluation should drive design, QA, and post-release review.&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;To help people focus on the problem, I use a simple tool that I call a &amp;#8220;problem definition.&amp;#8221; This is a document (preferably a wiki page) that describes the problem and why it is important: inefficiency, risk, etc. There is also a section for proposed solutions where the author can suggest their ideas. The problem definition then becomes a focal point for clarification and learning. Stakeholders can ask questions to explore the use case. &lt;/p&gt;&lt;p&gt;I think this type of document was the original intent behind the &amp;#8220;User Story&amp;#8221; used in various agile methodologies. But over time, the User Story has been corrupted into a formulaic and useless &amp;#8220;As a _____, I want to ________ so I can ________&amp;#8221;; I have yet to read a User Story that really got to the heart of the problem and why it was worth solving.&lt;/p&gt;&lt;p&gt;Problem definitions are precursors to project artifacts like specifications and work items. They should be easy for anyone to write in their own language. No commitment is made to implement a solution. Sometimes problems can be solved with training or better documentation. Even if no action is taken, expressing and hearing these issues is important in bridging the gap between the product team and its users.&lt;/p&gt;&lt;p&gt;Everyone on the team should be able to answer the question &amp;#8220;why are we doing this?&amp;#8221; If they can&amp;#8217;t, they can&amp;#8217;t be expected to be contribute to an effective solution.&lt;/p&gt;&lt;/p&gt;</content><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/4581798799371107152/posts/default/728241239264808894'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/4581798799371107152/posts/default/728241239264808894'/><link rel='alternate' type='text/html' href='https://www.contenthere.net/2019/11/what-problem-are-we-solving.html' title='What problem are we solving?'/><author><name>Seth Gottlieb</name><uri>http://www.blogger.com/profile/01233710343214501624</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-4581798799371107152.post-3955608321699255069</id><published>2019-10-23T12:03:00.001-04:00</published><updated>2019-10-28T16:24:28.263-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="development"/><category scheme="http://www.blogger.com/atom/ns#" term="usability"/><title type='text'>Users want easy. Developers want simple.</title><content type='html'>One of my favorite tech presentations is &lt;a href=&quot;https://www.infoq.com/presentations/Simple-Made-Easy/&quot;&gt;Rich Hickey’s Simple Made Easy&lt;/a&gt;. The premise of the talk is that simple and easy are not the same thing. In fact, you often sacrifice simplicity in pursuit of easiness. As Rich says, we consider something easy if it is “at hand.” Like the &lt;a href=&quot;https://www.staples.com/Staples-Easy-Button/product_606396&quot;&gt;Staples Easy Button&lt;/a&gt;. Simplicity is something totally different. It is the absence of complexity - lots of moving parts entwined together in intricate ways. If an “easy button” really existed, it would be supported by a complex network of solutions that could take care of any problem. &lt;br /&gt;&lt;br /&gt;Rich was talking about programming and how to keep code maintainable. Simple code is easier to understand and extend. But I apply this perspective to lots of things. For example, a bicycle is a simple machine. A quick glance reveals how it works and what every part does. But pedaling up a hill is not easy. A modern car is complex. There is a lot of stuff going on under the hood and nearly all drivers accept that they have no hope of understanding it all.&lt;br /&gt;&lt;br /&gt;In building software, I have come to realize that users only value ease. A user wants the features he/she likes “at hand.” In a mature, multi-featured application, UI design is mainly focused on hiding some features to make the frequently used ones stand out. Users don’t want simple. Take away any feature and there will be complaints. &lt;br /&gt;&lt;br /&gt;Developers want simple. They want to work with code that is understandable and behaves predictably. They realize that every new feature is supported by hundreds of lines of code that need to be tested with every modification. Much of Rich&#39;s talk deals with programming styles that unnecessarily create complexity. But some requirements will force even well designed code to become complex. Ironically, these requirements are often driven by a desire for a &quot;simple and easy&quot; user experience (personalization, natural language inputs, voice control...).&lt;br /&gt;&lt;br /&gt;Why does this matter? &lt;br /&gt;&lt;br /&gt;If we don&#39;t acknowledge that &quot;simple and easy&quot; are in conflict, there will be unmet expectations that lead to friction between stakeholders. Users can become impatient discussing complex details about their &quot;simple feature.&quot; Development teams can feel under-appreciated for the effort required to do a &quot;simple thing.&quot; The time taken to wrestle with ignored complexity can look like incompetence.&lt;br /&gt;&lt;br /&gt;Take, for example, the Google search box. It is easy to use... just type in some text and click the button. But it is anything but simple. There is an &lt;a href=&quot;https://www.lifehack.org/articles/technology/20-tips-use-google-search-efficiently.html&quot;&gt;art to constructing effective queries&lt;/a&gt; and a whole industry (SEO) dedicated to manipulating what comes back. There is also a set of &lt;a href=&quot;https://zapier.com/blog/advanced-google-search-tricks/&quot;&gt;features that makes the search box like the command line for the web&lt;/a&gt;. I can&#39;t tell you how many times I have heard &quot;I just want something simple like Google.&quot; Google isn&#39;t simple. But it &lt;i&gt;is&lt;/i&gt; easy. What makes Google search feel easy is that the core functionality is obvious and it gives useful feedback to help you get what you want. You may not get what you want on the first try, but it is easy to refine your search to hone in on your target. Voice assistants aim for the same level of ease but I find the trial/error loop to be more frustrating. That is probably because the system can return only one response and the feedback loop takes longer. &lt;br /&gt;&lt;br /&gt;I know how annoying it can be for someone to pick at language and I am not advocating to constantly correct people on their word choices. But I do think it is important for everyone to understand what they are asking for and what they are giving up when they get it. We can do that by probing into what the user means by &quot;simple.&quot; That question is reasonable because both &quot;simple&quot; and &quot;easy&quot; are subjective terms that require elaboration. When we document requirements, we should avoid all subjective language. After all, most of the work to achieve the perception of ease and simplicity is through iteration and refinement. These qualities are not intrinsic to the feature but rather to the sentiment of the user. </content><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/4581798799371107152/posts/default/3955608321699255069'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/4581798799371107152/posts/default/3955608321699255069'/><link rel='alternate' type='text/html' href='https://www.contenthere.net/2019/10/users-want-easy-developers-want-simple.html' title='Users want easy. Developers want simple.'/><author><name>Seth Gottlieb</name><uri>http://www.blogger.com/profile/01233710343214501624</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-4581798799371107152.post-8705139113652792440</id><published>2019-05-23T14:44:00.002-04:00</published><updated>2019-05-23T14:44:18.438-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Product Management"/><title type='text'>Email is the portal</title><content type='html'>&lt;p&gt;&lt;a href=&quot;https://www.aberdeen.com/&quot;&gt;Aberdeen&lt;/a&gt; is a Market Intelligence company. We provide market data (Firmographic, Technographic, Leads, and Intent) as well as quantitative and qualitative insights based on those data. My primary role as Chief Technology Officer is to develop and improve products that deliver and maximize the value of these data and insights. This is really the same &quot;right content, right context, right time&quot; problem that I have been working on for years as a content management professional.&lt;/p&gt;  &lt;p&gt;Our strategy for detail data is to push them directly to the systems where they are actionable. For example, our &lt;a href=&quot;https://www.aberdeen.com/product/aberdeen-intent-for-salesforce/&quot;&gt;Aberdeen Intent for Salesforce app&lt;/a&gt; creates Salesforce opportunities out of companies that are showing intent. The Salesforce app also includes some charts to visualize summaries and trends. We also have other apps to help Salesforce users interact with our firmographic and technographic data. But Salesforce accounts are often rationed and not everyone spends their time there. The conventional answer to reach other users is a customer portal.&lt;/p&gt;&lt;p&gt;But does the world really need yet another portal?&lt;/p&gt;&lt;p&gt;Technical and non-technical roles are forced to work in so many different platforms. I feel especially bad for marketers (queue the scary &lt;a href=&quot;https://chiefmartec.com/2019/04/marketing-technology-landscape-supergraphic-2019/&quot;&gt;Brinker SuperGraphic&lt;/a&gt;). But every office job today seems to involve logging into different systems to check in on various dashboards or consoles.&lt;/p&gt;&lt;p&gt;Yes, single sign-on can make authentication easier. But SSO is rarely configured because so few of these systems are owned by Corp IT. Plus, you need to remember where to go.&lt;/p&gt;&lt;p&gt;Yes, an email alert can suggest when it may be worthwhile to check in on a dashboard. But establishing the right threshold for notification involves time consuming trial and error that few have the patience for. It only takes a few &quot;false alarm&quot; notifications to make you hesitate before following a link.&lt;/p&gt;&lt;p&gt;Corporate portal technologies tried to solve this problem by assembling views (portlets) into one interface but the result was both unwieldy and incomplete. There is a constant flow of BI initiatives that try to solve this problem by bringing the data together into a unified place. Too complicated. Too cumbersome. And yet another place to go.&lt;/p&gt;&lt;p&gt;So most users are doomed to flit from portal to portal like a bee looking for nectar.&lt;/p&gt;&lt;p&gt;I am starting to believe that we already have the unified, integrated portal we have been looking for. It is the email client where we spend hours of every work day. Rather than develop a dashboard or portal that people need to go to, deliver simple glance-able email reports that highlight what is new/different and needs attention.&lt;/p&gt;&lt;p&gt;Longtime readers of this blog may be aware of my &lt;a href=&quot;http://www.contenthere.net/2006/05/email-and-content-management_44.html&quot;&gt;contempt for email as a collaboration and information management tool&lt;/a&gt;. However, even in the age of Slack, there is no more reliable way to notify business users than email. Decision makers live in their email clients. If you want to get information in front of someone, the best place to put it is in their inbox.&lt;/p&gt;&lt;p&gt;Designing email-friendly business intelligence is not trivial. Beyond the technical limitations of email clients&#39; HTML rendering capabilities, you also have to consider the context. People are already overloaded with email so the reports need to minimize cognitive load. They need to quickly convey what is important within a couple distracted seconds. Perhaps even on a mobile phone in between meetings. Less is more - just a few Key Performance Indicators (KPIs) to make the user feel like he is in the loop and can answer questions about the status of the program or take action if necessary.&lt;/p&gt;&lt;p&gt;Frequency is also an important factor. The cadence should align with the decision making cycle. These emails are not for catching daily anomalies. Those types of warnings are better handled by system alerts that only go out when thresholds are met (behind schedule, over budget, no data detected...). &lt;/p&gt;&lt;p&gt;As I think about a portal to deliver Aberdeen&#39;s market intelligence insight, I keep going back to the question, what if our BI portal wasn&#39;t a portal at all? Wouldn&#39;t it be better to put our data into user interfaces that our clients are already looking at?&lt;/p&gt; </content><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/4581798799371107152/posts/default/8705139113652792440'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/4581798799371107152/posts/default/8705139113652792440'/><link rel='alternate' type='text/html' href='https://www.contenthere.net/2019/05/email-is-portal.html' title='Email is the portal'/><author><name>Seth Gottlieb</name><uri>http://www.blogger.com/profile/01233710343214501624</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-4581798799371107152.post-3847995146731465671</id><published>2018-07-12T09:57:00.000-04:00</published><updated>2018-07-12T13:14:34.711-04:00</updated><title type='text'>Who is replacing WordPress?</title><content type='html'>I have been working on an interesting data set about web content management system (WCMS) installs. From these data I am able to identify events when an organization rebuilds their website on a new WCMS. As anyone who has been involved with a web development project knows, a website re-platforming represents a lot of time, expense, and decision making. So these events are important market signals -- especially when you consider the platform they are leaving and how long ago it was deployed.&lt;br /&gt;&lt;br /&gt;I am starting to publish interesting observations on the Aberdeen Blog. &lt;a href=&quot;https://ww.aberdeen.com/techpro-essentials/what-replaces-wordpress/&quot;&gt;This first post lists which WCMSs most commonly replace WordPress&lt;/a&gt;. I am doing similar analysis on other software categories such as eCommerce.&lt;br /&gt;&lt;br /&gt;Subscribe to the &lt;a href=&quot;https://ww.aberdeen.com/category/techpro-essentials/&quot;&gt;Tech Pro Essentials channel of the Aberdeen blog&lt;/a&gt; if you want to see more posts like these.</content><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/4581798799371107152/posts/default/3847995146731465671'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/4581798799371107152/posts/default/3847995146731465671'/><link rel='alternate' type='text/html' href='https://www.contenthere.net/2018/07/who-is-replacing-wordpress.html' title='Who is replacing WordPress?'/><author><name>Seth Gottlieb</name><uri>http://www.blogger.com/profile/01233710343214501624</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-4581798799371107152.post-4307028264896577480</id><published>2018-06-20T10:24:00.000-04:00</published><updated>2018-06-20T10:24:08.288-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="data science"/><title type='text'>My Growing Data Science Toolkit</title><content type='html'>&lt;br /&gt;At Aberdeen, I am taking vast amounts of data and working them into a unified data model that encompasses company information, web traffic, survey results, etc.. The actual workflow is nicely summarized in this classic dataists post called “&lt;a href=&quot;http://www.dataists.com/2010/09/a-taxonomy-of-data-science/&quot;&gt;A Taxonomy of Data Science&lt;/a&gt;”: OSEMN (Obtain, Scrub, Explore, Model, iNterpret).&lt;br /&gt;&lt;br /&gt;Here are the tools and tricks that I use on a daily basis.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Command Line Tools&amp;nbsp;&lt;/h2&gt;Massive data files are troublesome for most editing programs (such as Excel or even VIM). It takes too much memory to hold all of that data in an editable state. Command line tools don’t have this problem because they work with data as a stream so they only need to load one line at a time.&lt;br /&gt;&lt;br /&gt;Kade Killary wrote an excellent article called “&lt;a href=&quot;https://medium.com/@kadek/command-line-tricks-for-data-scientists-c98e0abe5da&quot;&gt;Command Line &amp;nbsp;Tricks for Data Scientists&lt;/a&gt;” . The tips range from simple to advanced. On the simple end, I learned about “wc -l” &amp;nbsp;which is the fastest way to get the number of lines in a file. Split is also a simple but powerful command for doing things like breaking up a large file into smaller batches for things like &lt;a href=&quot;https://www.mturk.com/&quot;&gt;Mechanical Turk&lt;/a&gt; (more on that later).&lt;br /&gt;&lt;br /&gt;When working with CSV files (the lingua franca of data science), I couldn’t live without &lt;a href=&quot;http://csvkit.readthedocs.io/en/1.0.3/&quot;&gt;CSVKit&lt;/a&gt;. It doesn’t do anything you can’t do with AWK but the syntax is optimized for working with CSV files and is much simpler. For example, “csvcut -n filename.csv” lists the names of each column in filename.csv. “csvcut -c 1,3,4 filename.csv &amp;gt; newfile.csv” exports columns 1,3, and 4 into a new CSV file called newfile.csv. csvformat is useful for handling delimiters and escapes so that the file can be ingested by other systems.&lt;br /&gt;&lt;br /&gt;As an aside, I always work with plain text formats such as CSV because they are more accessible to different tools than binary formats such as Excel.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Mechanical Turk&lt;/h2&gt;Most data scientists throw away data that they can identify as bad. Unfortunately, I don’t have that luxury. For example, if I discover that the URL we have a company is incorrect, I need to fix it because I use domain to link to other data. But what do you do if you have over 100,000 missing or bad URLs? Automation can only take you so far. After a certain point, you need an actual human to do some research. &amp;nbsp;I have found that Mechanical Turk is the fastest way to get help with these manual tasks. Using Mechanical Turk effectively is an art that I am just starting to get proficient with.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Git&lt;/h2&gt;When working with data files, there is a tendency to save copies in various steps in the process so you can compare what has changed, recover from a mistake, or take a different approach. Before long, you get directories full of cryptically named files. Some people have developed good systems for organizing and naming these files but I think the best approach is to use a source control system like GIT. &amp;nbsp; With GIT, you can commit a version of the same file with a comment about what you did with it. And, of course, Git helps you work with others.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;VisualDiffer&amp;nbsp;&lt;/h2&gt;While GIT comes with comparison functionality to show the difference between versions, I don’t think it is particularly easy to use. &lt;a href=&quot;http://visualdiffer.com/&quot;&gt;VisualDiffer&lt;/a&gt;&amp;nbsp;is a cheap and simple tool to show side-by-side comparisons of text files like CSV. More advanced (and expensive) tools like Beyond Compare, Araxis, and DeltaWalker can handle binary formats such as Excel and even merge differences. But I have not found a need for those yet. My most common use case is to see changes that a script or someone else made to a file.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;AWS&lt;/h2&gt;I use a lot of AWS tools in my work. S3, DynamoDB, Lambda…. At the bare minimum EC2 is a quick and cheap way to set up a computer that I can execute a long running process on. For example, I have one automated process that goes through hundreds of thousands of records and uses various APIs to gather additional data. The process literally took weeks. Using EC2 and screen sessions is infinitely better than chaining my own workstation to an internet connection and having it run continuously for days.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Pandas and Jupyter Notebooks&lt;/h2&gt;Since I am already a Python programmer, Pandas and Jupyter Notebooks were an obvious choice for exploring and modeling data. I love how you can build a step by step annotated process to assemble and visualize the data.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;PowerBI&lt;/h2&gt;At Aberdeen, we add another step onto the end of the OSEMN process: Publish. This is where we use the output of our research to deliver interactive data products to our customers. Those products include embeddable dashboards and alerts that customers can use to make better decisions and seize opportunities. PowerBI is a rapidly improving platform for delivering interactive reports. We have PowerBI experts on staff so I mainly send data for them to turn into customer facing tools.&lt;br /&gt;&lt;br /&gt;</content><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/4581798799371107152/posts/default/4307028264896577480'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/4581798799371107152/posts/default/4307028264896577480'/><link rel='alternate' type='text/html' href='https://www.contenthere.net/2018/06/my-growing-data-science-toolkit.html' title='My Growing Data Science Toolkit'/><author><name>Seth Gottlieb</name><uri>http://www.blogger.com/profile/01233710343214501624</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-4581798799371107152.post-2498720609383024748</id><published>2018-06-15T16:13:00.001-04:00</published><updated>2018-06-15T16:14:38.661-04:00</updated><title type='text'>New Job: VP of Research Products at Aberdeen</title><content type='html'>I am excited to announce that I am now working at &lt;a href=&quot;http://www.aberdeen.com/&quot;&gt;Aberdeen&lt;/a&gt;&amp;nbsp;where I am the Vice President of Research Products. This is a big time at Aberdeen because we are shifting from a traditional analyst firm to what we are calling a &quot;Market Intelligence&quot; company. What that means is that our analysis is based on quantitative data rather than anecdote and opinion.&lt;br /&gt;&lt;br /&gt;In particular, we are focusing on three categories of performance indicators:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Awareness&lt;/b&gt; quantified through surveys that ask respondents whether they are familiar with a product or brand.&amp;nbsp;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Consideration&lt;/b&gt;, which is based on &lt;a href=&quot;https://en.wikipedia.org/wiki/Intent_marketing#Intent_Data_Sources&quot;&gt;intent data&lt;/a&gt;. &amp;nbsp;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Market Share&lt;/b&gt;, which is based on install data.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;You can read more about the methodology on our &lt;a href=&quot;https://ww.aberdeen.com/solutions/&quot;&gt;solutions page&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In this role I have gone deep into data science and also tapped into my own nerdy creativity and curiosity. If you like &lt;a href=&quot;http://fivethirtyeight.com/&quot;&gt;FiveThirtyEight&lt;/a&gt; and &lt;a href=&quot;http://freakonomics.com/&quot;&gt;Freakononics&lt;/a&gt;, you would love my job. &amp;nbsp;It&#39;s especially great for me because it allows me to leverage many skills I have developed over the years as an industry analyst, software developer, and database administrator.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Lately I have been exploring historical install data to analyze events where one web content management system replaces another. For example, when a company replaces a website running on WordPress with a new website running on Sitecore. Re-platforming events such as these are significant because they represent customer requirements, product strengths (at least strengths perceived during the selection process), and big investments of time and money. And then when you combine that with intent data that shows which customers are showing signs of looking for a replacement technology, you get highly actionable insight.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;These data will be incorporated as features in our subscription products but I do plan to post tidbits on the Aberdeen blog. So stay tuned!&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/4581798799371107152/posts/default/2498720609383024748'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/4581798799371107152/posts/default/2498720609383024748'/><link rel='alternate' type='text/html' href='https://www.contenthere.net/2018/06/new-job-aberdeen.html' title='New Job: VP of Research Products at Aberdeen'/><author><name>Seth Gottlieb</name><uri>http://www.blogger.com/profile/01233710343214501624</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-4581798799371107152.post-4399036105620602760</id><published>2017-11-17T12:10:00.001-05:00</published><updated>2017-11-17T12:10:32.056-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="management"/><title type='text'>Silos everywhere</title><content type='html'>It is fairly typical for a consultant or new leader to walk into an organization and see nothing but silos. These leaders regard silos as a barrier to efficiency and make them a target for change. What they often wind up doing is replacing organically formed structures with new ones that look better on powerpoint than in practice.&lt;br /&gt;&lt;br /&gt;Why does this happen? Let&#39;s start by digging into what a silo is. &quot;Silo&quot; is usually used as a derogatory term to describe a grouping that you don&#39;t like. But groupings are important in large organizations because the number of possible point to point connections makes communication too noisy and prioritization too difficult. If everyone is talking to everyone all the time, nothing gets done. Teams naturally form to confront this challenge. Complementary capabilities are assembled and scaled in highly focused work groups. Process is continuously refined because of a tight feedback loop.&lt;br /&gt;&lt;br /&gt;To the outsider, trying to navigate these structures is confusing and frustrating. People seem unaware of what is happening outside of their group. They appear oblivious rather than focused. The reactionary impulse is to criticize the duplication of what appear to be identical functions. The ego feels good when you think you see obvious dysfunction that nobody else recognizes. It certainly feels better than having to slog through complexity that everyone else understands.&lt;br /&gt;&lt;br /&gt;But there is great risk in introducing sweeping plans to achieve synergy before really understanding how these teams function. Even if the reasoning is valid, it is incredibly disruptive to blow up any working system and make it re-form under stress and uncertainty.&lt;br /&gt;&lt;br /&gt;Before eliminating &quot;silos,&quot; you need to understand why they formed. Were they imposed from the top down in order to make the organization easier to understand from the top? Or did these structures develop naturally to solve operational problems related to coordination and focus? Can the same benefits be achieved more efficiently?&lt;br /&gt;&lt;br /&gt;You can&#39;t fix a working system until you fully understand why it is the way it is. You need to understand what is working right now and what obstacles stood in the way from the system naturally adapting to solve its broken parts. When you hypothesize dysfunction, you need to introduce your corrections scientifically and measure the results. But most importantly, you need to find the best parts and figure out a way to expand on them.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;</content><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/4581798799371107152/posts/default/4399036105620602760'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/4581798799371107152/posts/default/4399036105620602760'/><link rel='alternate' type='text/html' href='https://www.contenthere.net/2017/11/silos-everywhere.html' title='Silos everywhere'/><author><name>Seth Gottlieb</name><uri>http://www.blogger.com/profile/01233710343214501624</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-4581798799371107152.post-4351935316597621677</id><published>2017-10-23T16:00:00.001-04:00</published><updated>2017-10-23T17:09:26.252-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="management"/><category scheme="http://www.blogger.com/atom/ns#" term="productivity"/><title type='text'>When remote working doesn&#39;t work</title><content type='html'>As a long time remote worker and manager of both distributed and co-located teams, I think about virtual teams a lot. While I have had great personal experiences with remote teams, there seems to be little consensus about whether it is a good idea. You have some articles touting the health, retention, and productivity benefits of letting people work from home. And you have other articles, like the recent Atlantic piece &quot;&lt;a href=&quot;https://www.theatlantic.com/magazine/archive/2017/11/when-working-from-home-doesnt-work/540660/&quot;&gt;When working from home doesn&#39;t work&lt;/a&gt;,&quot; that indicate a shift back to traditional office environments. Based on my own experience, I find it hard to imagine large companies succeeding by dictating enterprise-wide policies around remote workers. &amp;nbsp;The effectiveness of distributed teams depend on critical factors that will vary from team to team. Here are three things that undermine the effectiveness of distributed teams.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;1. Hybrid teams do not work&lt;/h2&gt;&lt;div&gt;A team should be either all colocated or all remote. A remote member of a predominantly colocated team will always be neglected. It is unavoidable. Co-located employees build habits that depend on seeing each other. They look around the room to decide who to include in a discussion. They respond to visual clues that a&amp;nbsp;colleague may be struggling. The interactions that are available to remote team members tend to be restricted to events that are either boring (like standing meetings) or stressful (like performance reviews). But relationships are formed in between these two extremes when people can be themselves and have the space to curious about each other and build trust.&amp;nbsp;&lt;/div&gt;&lt;h2&gt;2. You can&#39;t convert a colocated team to a distributed one&lt;/h2&gt;&lt;div&gt;A team is not just a collection of people. It is an ecosystem that is shaped by individual talent, chemistry, goals, and an environment that presents constraints and opportunities. The environment plays a huge role in how people interact. And by interact, I don&#39;t just mean communication (although that is part of it) but also how responsibilities are divided and handoffs happen. If all of the sudden people start working remotely, you need to treat the group as a new team. You need to establish new norms and ways of working together. Roles will change. You need to use different methods to develop camaraderie and create an engaging work experience.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;h2&gt;3. Not everyone will thrive as a remote worker&lt;/h2&gt;&lt;div&gt;It takes a special type of person to be an effective and happy remote worker. Their work environment has to be conducive to productivity. They need to be goal oriented and invested in the success of the team. They should be committed to their craft and want to build mastery by continuous refinement. I have also recently begun to appreciate the importance of being in the right phase of one&#39;s career. At some point in your career, it is helpful to go into an office to do things like: build professional social skills; find a mentor; bond with people; try different roles; get lots of feedback; and have the general sensation that you work for a company. It is harder for remote workers to advance into new roles because they don&#39;t get to see other people doing those roles. Personally, I am grateful that I got to work at a number of different kinds of offices and I have some great professional connections from that time. I think I would be a wreck if my early managers had to deliver feedback over phone and email without being able to modulate tone and provide support based on my reaction.&lt;br /&gt;&lt;br /&gt;Based on these three observations, a smart executive will not dictate working style based on business journal articles or office leases. Instead, he/she should empower teams to construct and distribute/consolidate themselves for optimal efficiency.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/4581798799371107152/posts/default/4351935316597621677'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/4581798799371107152/posts/default/4351935316597621677'/><link rel='alternate' type='text/html' href='https://www.contenthere.net/2017/10/when-remote-working-doesnt-work.html' title='When remote working doesn&#39;t work'/><author><name>Seth Gottlieb</name><uri>http://www.blogger.com/profile/01233710343214501624</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-4581798799371107152.post-8325783862411744751</id><published>2017-10-10T08:30:00.002-04:00</published><updated>2017-10-10T16:36:56.292-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Product Management"/><title type='text'>Release notes: the most important documentation you will ever write</title><content type='html'>One of my favorite high school teachers used to say &quot;if you want to learn about the world, read the newspaper.&quot; This is great advice because, by updating you on what is happening now, newspaper articles expose you to places, people, and histories that you can dig into more with additional research.&lt;br /&gt;&lt;br /&gt;I feel the same way about release notes. Let&#39;s face it, people don&#39;t read product manuals cover to cover any more than they do encyclopedias. You read a reference resource when you want to learn more about something that you are already aware of. In the product world, you read the manual when you are struggling to figure out how to use a feature. But what if you don&#39;t know a feature exists? That is where release notes come in.&lt;br /&gt;&lt;br /&gt;If you practice lean product development, your product should be constantly improving so there should be plenty of material to talk about in release notes. You should also have an engaged customer base that likes the product, wants to learn new ways to use it, and is excited to know what is coming next. Release notes are the ideal channel to educate these customers about product features and progress. So make your release notes good!&lt;br /&gt;&lt;br /&gt;While they are not release notes in a classic sense (because they are not tied to individual releases) a good model to follow is the &quot;What&#39;s new with Alexa&quot; emails that Amazon Echo owners get. These emails are easy to read and have just enough information to tease the reader into trying something and learning more. They also mention older features that new users may not have heard about yet. In fact, I am convinced that some weeks those emails only contain older features. But they are still useful reminders!&lt;br /&gt;&lt;br /&gt;The redesigned App Store for iOS 11 also has some of these qualities.&lt;br /&gt;&lt;br /&gt;I pay a lot of attention to release notes for all of the products I manage. Here are some habits that I think make them successful.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Write the first draft of the release notes at the start of a release cycle. That is, when the release is scoped and getting prepared for QA.&lt;/li&gt;&lt;li&gt;Invite internal stakeholders (especially sales, support, and QA) to review and comment on early release notes drafts. You might learn about functional issues that were not considered during the initial design. You may also learn about how to better describe/position the feature.&lt;/li&gt;&lt;li&gt;Make the release notes fun and easy to read. I find that humor are helpful in keeping the reader&#39;s attention.&lt;/li&gt;&lt;li&gt;Make release notes required reading for staff. After sending out the release notes, I email managers a quiz question to ask their team.&amp;nbsp;&lt;/li&gt;&lt;li&gt;Keep the notes short. Focus on what the change is and the problem it solves. Talking about the &quot;why&quot; is critical because it helps the reader understand what the feature is used for. For more details, link to longer form knowledge base articles or product documentation.&lt;/li&gt;&lt;li&gt;Include a &quot;new to you&quot; section that describes a pre-existing feature that is under-utilized or not widely known about.&amp;nbsp;&lt;/li&gt;&lt;li&gt;Copy the release notes into the Git merge commit message. This makes deployed versions stand out and searchable.&amp;nbsp;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;</content><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/4581798799371107152/posts/default/8325783862411744751'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/4581798799371107152/posts/default/8325783862411744751'/><link rel='alternate' type='text/html' href='https://www.contenthere.net/2017/10/release-notes-most-important.html' title='Release notes: the most important documentation you will ever write'/><author><name>Seth Gottlieb</name><uri>http://www.blogger.com/profile/01233710343214501624</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-4581798799371107152.post-1835938857568355409</id><published>2017-10-03T11:00:00.000-04:00</published><updated>2017-10-03T12:38:19.661-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Product Management"/><title type='text'>Lean Product Development with SLCs rather than MVPs</title><content type='html'>I honestly can&#39;t think of a better way to build products and services than the&amp;nbsp;&lt;a href=&quot;https://en.wikipedia.org/wiki/Lean_product_development&quot;&gt;lean product development&lt;/a&gt;&amp;nbsp;method. All of the work I have done over the last several years has followed the pattern of growing a customer base around a small simple product that evolves and matures in response to the needs of the users.&lt;br /&gt;&lt;br /&gt;Our latest product, &lt;a href=&quot;https://ondemand.lionbridge.com/&quot;&gt;Lionbridge onDemand&lt;/a&gt;, has been a great success and yet it started out so small: we were testing whether we could build a business around a self service video translation site. We built the simplest app possible but left room for growth. We leveraged operational talent that Lionbridge already had and an entrepreneurial spirit that was not being satisfied. We tested different ways to drive customers to the site. We got just enough market response to see a path and keep moving forward. Since our first sale, we have been constantly learning, optimizing, and expanding. Now onDemand is &lt;a href=&quot;https://www.lionbridge.com/en-us/about/news/lionbridge-ondemand-grows-68-2016&quot;&gt;a thriving business&lt;/a&gt; with a broad range of services. We translate all sorts of content (over 40 file types) into pretty much any language you can think of. We have a &lt;a href=&quot;http://developers.lionbridge.com/content/index.html&quot;&gt;public API&lt;/a&gt; and integrations with several popular content management and commerce systems. But most importantly, we have happy customers who rely on the service.&lt;br /&gt;&lt;br /&gt;Whenever I want to build a new product, or even add a new feature to an existing product, my plan is to start with an MVP (minimum viable product) and iterate from there. But this article, &quot;&lt;a href=&quot;https://blog.asmartbear.com/slc.html&quot;&gt;I hate MVPs. So do your customers. Make it SLC instead&lt;/a&gt;&quot; by &lt;a href=&quot;http://blog.asmartbear.com/jason-cohen&quot;&gt;Jason Cohen&lt;/a&gt;, gave me pause. SLC stands for &quot;Simple, Lovable, and Complete&quot; and, after reading the article, I realize that SLCs are the recipe for success in lean product development; not MVPs.&lt;br /&gt;&lt;br /&gt;Here is the difference. An MVP is (in a pure sense) the flimsiest thing you can build to answer a question about a potential market. The emphasis is more on the &quot;M&quot; (minimum) than the &quot;V&quot; (viability) and most interpret that balance as a semi functional prototype. This kind of MVP is frustrating to customers because it doesn&#39;t solve their problem in a helpful way. It focuses on validating that the problem exists and that there is value in solving it. MVPs are selfish because they prioritize research over actual customer benefit.&lt;br /&gt;&lt;br /&gt;If you really want to learn about customer need, and build good relationships at the same time, you should take one customer problem and solve it well. Build an SLC. I know that the line is blurry here. An MVP could be an SLC if you make lovability a requirement for viability. But often you hear bad solutions as being excused or justified as &quot;just an MVP.&quot;&lt;br /&gt;&lt;br /&gt;The first iteration of Lionbridge onDemand did what was needed for a successful, gratifying transaction. In particular:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The customer could upload very large files. This is necessary because video files are big.&lt;/li&gt;&lt;li&gt;The project was automatically quoted so the customer didn&#39;t have to wait.&lt;/li&gt;&lt;li&gt;The customer could connect with an online sales agent through chat. This turned out to be a critical feature because we learned so much from our customers during these interactions.&lt;/li&gt;&lt;li&gt;The customer could pay for the service using a credit card so he/she got the experience of a seamless, self-service transaction.&lt;/li&gt;&lt;li&gt;The operations team was prepared to produce a high quality deliverable in a reasonable timeframe. The customer&#39;s need was satisfied.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;While we launched the first iteration of Lionbridge onDemand quickly (less than 2 months from concept to first sale) we took the time to get those pieces right. That was a little over 4 years ago and our first customer continues to do business with us.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;We are constantly adding new features to Lionbridge onDemand and every time we do, we treat it as an &lt;strike&gt;MVP&lt;/strike&gt; SLC. We don&#39;t launch the feature unless it makes the user&#39;s experience a little better by solving a problem (however small) in a complete and satisfactory way.&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/4581798799371107152/posts/default/1835938857568355409'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/4581798799371107152/posts/default/1835938857568355409'/><link rel='alternate' type='text/html' href='https://www.contenthere.net/2017/10/lean-product-development-with-slcs.html' title='Lean Product Development with SLCs rather than MVPs'/><author><name>Seth Gottlieb</name><uri>http://www.blogger.com/profile/01233710343214501624</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-4581798799371107152.post-113628909743297722</id><published>2017-09-11T10:00:00.000-04:00</published><updated>2017-09-11T10:00:31.241-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="localization"/><title type='text'>Three reasons why website localization projects fail</title><content type='html'>Many organizations go into website localization initiatives unaware of the complexities and best practices involved. When this happens, frustration is the usual outcome. Having seen a number of localization efforts struggle, I believe that the root causes fall into the following three categories. The good news is that all of these problems can be avoided with experience and planning.&lt;br /&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;h2&gt;1. The website was not designed for localization&lt;/h2&gt;&lt;div&gt;Some websites are easier to localize than others. In the worst case, it is better to start over with a new website rather than try to remediate and localize an existing site. The best time to prepare a site for localization is before it is built. You need to select a suitable CMS and &lt;a href=&quot;http://content.lionbridge.com/planning-for-localization/&quot;&gt;follow best practices during implementation and content development&lt;/a&gt;. If you didn&#39;t build the website with localization in mind, you (or your integrator) probably didn&#39;t follow these guidelines, which are usually the first corners to be cut when budgets and timelines get thin. The worst part is that you won&#39;t know how prepared you are for localization until you try it.&lt;br /&gt;&lt;br /&gt;Don&#39;t let the integrator leave until you have successfully, published your second language. If your integrator is already gone, a quick assessment can reveal warning signs so you can get a head start on remediation.&lt;/div&gt;&lt;h2&gt;2. No global business strategy&lt;/h2&gt;&lt;div&gt;Multi-lingual publishing is (or should be) part of a larger strategy to extend your market into other languages and cultures. If you succeed in getting noticed by different language speakers but fail to help them get value from your products and services, you are no better off. You need to make sure your products, sales, and customer service are sufficiently prepared to serve these new customers. Otherwise your localized website becomes an expensive burden that is tempting to neglect rather than &amp;nbsp;an investment that drives growth.&lt;/div&gt;&lt;h2&gt;3. Lack of commitment&lt;/h2&gt;&lt;div&gt;A common failing is to treat a website as a technology asset that can be neglected after launch. &lt;a href=&quot;http://www.contenthere.net/2010/06/jeff-cram-your-website-is-not-project.html&quot;&gt;Your website is not a project&lt;/a&gt;. If you want your site to engage with your audience, you need to stay engaged. Multilingual publishing raises the stakes by adding another dimension and cost multiplier to effective website management. If you can&#39;t justify the cost of maintaining localized sites, they will rapidly degrade into an embarrassment. &lt;a href=&quot;http://www.contenthere.net/2013/04/portfolio-rot.html&quot;&gt;The web is littered with rotting websites&lt;/a&gt;. The worst examples are localized websites that have fallen into disrepair after initial translation.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/4581798799371107152/posts/default/113628909743297722'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/4581798799371107152/posts/default/113628909743297722'/><link rel='alternate' type='text/html' href='https://www.contenthere.net/2017/09/three-reasons-why-website-localization.html' title='Three reasons why website localization projects fail'/><author><name>Seth Gottlieb</name><uri>http://www.blogger.com/profile/01233710343214501624</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-4581798799371107152.post-1532720172400873050</id><published>2016-08-26T08:38:00.000-04:00</published><updated>2016-08-26T08:38:26.549-04:00</updated><title type='text'>New Blog: Lionbridge CTO Corner</title><content type='html'>I am writing about multilingual publishing on a new blog called &quot;&lt;a href=&quot;http://content.lionbridge.com/category/cto-corner/&quot;&gt;CTO Corner&lt;/a&gt;.&quot;&amp;nbsp;&lt;a href=&quot;http://content.lionbridge.com/systems-integrator-needs-know-multilingual-publishing/&quot;&gt;This is a rich topic that many content management professionals never get exposed to&lt;/a&gt;. One of my hopes for this blog is to bring in experiences from others who are immersed in building and maintaining multilingual websites. Software vendor perspectives about managing multilingual content are welcome as well. If you would like to share,&amp;nbsp;&lt;a href=&quot;https://twitter.com/sggottlieb&quot;&gt;@message me on Twitter&lt;/a&gt;&amp;nbsp;and we can set up an interview.</content><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/4581798799371107152/posts/default/1532720172400873050'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/4581798799371107152/posts/default/1532720172400873050'/><link rel='alternate' type='text/html' href='https://www.contenthere.net/2016/08/new-blog-lionbridge-cto-corner.html' title='New Blog: Lionbridge CTO Corner'/><author><name>Seth Gottlieb</name><uri>http://www.blogger.com/profile/01233710343214501624</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-4581798799371107152.post-5183697581332487409</id><published>2016-08-17T08:47:00.002-04:00</published><updated>2016-08-17T08:47:31.562-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="collaboration"/><title type='text'>Just say no to standups</title><content type='html'>I never liked regularly scheduled standup meetings. They interrupt your flow. They are boring because most of what is said has nothing to do with you. When an interesting topic does come up, the standup quickly transforms into a meeting-meeting that holds uninterested parties hostage. Standups are lame.&lt;br /&gt;&lt;br /&gt;The good news is that, thanks to tools like Slack and Hipchat, we don&#39;t need to suffer through standups anymore. For around a year, my development teams having used ChICO (Checkin/Checkout) rooms. I got the idea from &lt;a href=&quot;https://logbook.hanno.co/nine-tools-to-keep-our-remote-team-together/&quot;&gt;this blog post&amp;nbsp;by&amp;nbsp;Zsolt Kocsmarszky&lt;/a&gt;. When team members check in, they report what they are working on, who they need to work with, and any blockers they foresee. When they check out, they report what they accomplished and their plans for the next day.&lt;br /&gt;&lt;br /&gt;This approach has multiple advantages over the classic standup.&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;b&gt;It does not need to be synchronous.&lt;/b&gt;&lt;br /&gt;People report in and read at a time that works for them. They are alerted when a new announcement is made and can check it in their next stopping point.&lt;/li&gt;&lt;li&gt;&lt;b&gt;It is scannable.&lt;/b&gt;&lt;br /&gt;You can scan over information that is not relevant.&amp;nbsp;&lt;/li&gt;&lt;li&gt;&lt;b&gt;It is self documenting.&lt;/b&gt;&lt;br /&gt;Nobody needs to capture minutes or take notes.&lt;/li&gt;&lt;li&gt;&lt;b&gt;It works well for geographically dispersed teams.&lt;/b&gt;&lt;br /&gt;Nothing is worse than a &quot;phone standup&quot; and, when timezones are involved, there is no good time to have them.&lt;/li&gt;&lt;li&gt;&lt;b&gt;It cuts across language barriers.&lt;/b&gt;&lt;br /&gt;This may be the biggest one for us. My team&#39;s written English skills are great but the spoken word is challenging due to accents and &quot;buffering&quot; (when the time it takes you to decipher a word and recall it&#39;s meaning makes you fall behind). Removing that barrier has brought my teams closer together on both personal and professional levels.&amp;nbsp;&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;Given these advantages, I am surprised when I hear about teams that still do standups. Please join me in saying no to these silly little meetings.&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/4581798799371107152/posts/default/5183697581332487409'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/4581798799371107152/posts/default/5183697581332487409'/><link rel='alternate' type='text/html' href='https://www.contenthere.net/2016/08/just-say-no-to-standups.html' title='Just say no to standups'/><author><name>Seth Gottlieb</name><uri>http://www.blogger.com/profile/01233710343214501624</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-4581798799371107152.post-6511909286294710226</id><published>2016-07-14T13:38:00.000-04:00</published><updated>2016-07-14T13:38:00.187-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="cto-blog"/><title type='text'>In-Context Review: Know the Power of Your CMS</title><content type='html'>I am blogging again (sort of). &amp;nbsp;Here is a&lt;a href=&quot;http://content.lionbridge.com/context-review-know-power-cms/&quot;&gt; post I wrote on the Lionbridge Blog about reviewing content in your CMS&lt;/a&gt;. Crazy. I know. But you would be surprised how many people think you should be reviewing content outside of their CMS.</content><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/4581798799371107152/posts/default/6511909286294710226'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/4581798799371107152/posts/default/6511909286294710226'/><link rel='alternate' type='text/html' href='https://www.contenthere.net/2016/07/in-context-review-know-power-of-your-cms.html' title='In-Context Review: Know the Power of Your CMS'/><author><name>Seth Gottlieb</name><uri>http://www.blogger.com/profile/01233710343214501624</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-4581798799371107152.post-7829602428672854507</id><published>2015-04-10T09:53:00.001-04:00</published><updated>2015-04-10T10:00:13.047-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="browsers"/><category scheme="http://www.blogger.com/atom/ns#" term="development"/><title type='text'>Internet Explorer Support</title><content type='html'>&lt;p&gt;I tend to be more aggressive than most when it comes to ending support for outdated browsers.  As I mentioned in &lt;a href=&quot;http://www.contenthere.net/2010/04/supporting-internet-explorer-6.html&quot;&gt;this article about ending IE6 support 5 years ago&lt;/a&gt;, supporting old browsers is not worth additional cost and drag on innovation. &lt;/p&gt;&lt;p&gt;I am happy whenever I see a big web property end support for an old browser, but I was absolutely thrilled to see that starting on &lt;a href=&quot;https://support.microsoft.com/en-us/gp/microsoft-internet-explorer&quot;&gt;January 12th 2016, Microsoft will only support the most current version of Internet Explorer available for their supported operating systems&lt;/a&gt;.  This means:&lt;/p&gt;&lt;ul&gt;	&lt;li&gt;IE8 and lower will be practically dead. It will only be supported on some embedded versions of Windows.&lt;/li&gt;	&lt;li&gt;IE9 will only be supported on Windows Vista (remember Vista?), which will lose support on April 11, 2017.&lt;/li&gt;	&lt;li&gt;IE10 will only be supported on older versions of Windows Server.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Even better, whenever Microsoft launches a new version of Internet Explorer, the older versions immediately lose support on mainstream desktops (and probably phones and tablets too).&lt;/p&gt;&lt;p&gt;Thanks Microsoft!  It is a lot easier to stop supporting a browser if the software vendor behind it has also abandoned it.&lt;/p&gt;  </content><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/4581798799371107152/posts/default/7829602428672854507'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/4581798799371107152/posts/default/7829602428672854507'/><link rel='alternate' type='text/html' href='https://www.contenthere.net/2015/04/internet-explorer-support.html' title='Internet Explorer Support'/><author><name>Seth Gottlieb</name><uri>http://www.blogger.com/profile/01233710343214501624</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-4581798799371107152.post-4705205303840679713</id><published>2015-04-01T13:38:00.001-04:00</published><updated>2015-04-01T13:38:31.164-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="security"/><title type='text'>Does the average user prefer multi-factor authentication to expiring passwords?</title><content type='html'>&lt;p&gt;I was doing some anecdotal research about password security preferences and I was surprised to find that most of the people I talked to favored two-factor authentication (using Google Authenticator) over expiring passwords.  My survey pool consisted of project managers who I think are pretty typical enterprise software users.  Around half of them had not seen two-factor authentication until I showed it to them.  The general attitude was that anything is better than expiring passwords &amp;mdash; an opinion that I agree with. &lt;/p&gt;&lt;p&gt;Are my colleagues unusually geeky or is this a trend that other people are seeing as well?  If you have experience, research, or intuition around this, I would love to hear from you.  @reply me on Twitter: &lt;a href=&quot;https://twitter.com/sggottlieb&quot;&gt;@sggottlieb&lt;/a&gt; if you have something to say.&lt;/p&gt;       </content><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/4581798799371107152/posts/default/4705205303840679713'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/4581798799371107152/posts/default/4705205303840679713'/><link rel='alternate' type='text/html' href='https://www.contenthere.net/2015/04/does-average-user-prefer-multi-factor.html' title='Does the average user prefer multi-factor authentication to expiring passwords?'/><author><name>Seth Gottlieb</name><uri>http://www.blogger.com/profile/01233710343214501624</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-4581798799371107152.post-1606623666301673018</id><published>2015-03-23T11:32:00.001-04:00</published><updated>2015-03-23T11:32:17.784-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Translation Proxy"/><title type='text'>Double International Snapshot</title><content type='html'>&lt;p&gt;Last year I wrote a post about &lt;a href=&quot;http://www.contenthere.net/2013/02/preventing-source-language-bleed-through.html&quot;&gt;two deployment patterns to prevent source language bleed through&lt;/a&gt; when using a &lt;a href=&quot;http://www.contenthere.net/2012/02/introduction-to-translation-proxies.html&quot;&gt;transaction proxy&lt;/a&gt;.  If you don&#39;t want to click through on the link, source language bleed through can happen when a visitor views a page with text that has not been translated yet.  Most translation proxies have an option to use machine translations for untranslated text but this is not always desirable.   &lt;/p&gt;&lt;p&gt;In our experience, the &quot;International Snapshot&quot; pattern works very well as long as the customer is willing to freeze their content while the site is being translated.  Without a content freeze it impossible to make the site completely translated.  You never know when a content editor is going to publish a new string.  It is also inefficient because the translators might need to translate text that is only on the site for a few hours.  For example, a translator might be sent a task to translate a sentence with a typo that will be corrected in a matter of minutes. &lt;/p&gt;&lt;p&gt;But not everyone is willing to interrupt their publishing flow.  Thanks to the wonderful world of content management systems, people are used to being able to publish whenever they want. To accommodate customers who have no tolerance for bleed through or content freezes, we have started to apply a new pattern that I call the &quot;Double International Snapshot.&quot;   This pattern is identical to the &quot;International Snapshot&quot; pattern but has an added layer of a translation instance which effectively freezes the content for the translators.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://www.flickr.com/photos/sggottlieb/16688734509&quot; title=&quot;Double International Snapshot by Seth Gottlieb, on Flickr&quot;&gt;&lt;img src=&quot;https://farm9.staticflickr.com/8592/16688734509_102a7c3eb0.jpg&quot; width=&quot;500&quot; height=&quot;333&quot; alt=&quot;Double International Snapshot&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;In this pattern, you have three instances of the site:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;The Original Site that is serving your source language visitors today.  This site can be updated regularly for the benefit of source language visitors.   &lt;/li&gt;&lt;li&gt;A &quot;Translation Snapshot&quot; that is a point-in-time snapshot of the Original Site.  This site provides a stable environment for new content discovery and staging translations. &lt;/li&gt;&lt;li&gt;An &quot;International Snapshot&quot; that is a point-in-time snapshot of the Translation Snapshot.  This is the site that your target language visitors will hit through the proxy.&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;The translation process works like this.  When you think it is time to refresh the translated sites, you refresh the Translation Snapshot.  This freezes the content for the translators so that they can complete their work without new content constantly appearing.  The Translation Snapshot can be finalized and go through all sorts of testing to make sure that it as perfect as it needs to be.  Once you are satisfied that the Translation Snapshot is production-ready, you refresh the International Snapshot from the Translation Snapshot.  Because the translations for the new content are already in the proxy, there will be no bleed-through. &lt;/p&gt;&lt;p&gt;The Double International Snapshot allows content editors to constantly publish new content to the source language site without compromising the stability of the translation environment.  The translated sites can be fully verified for translation completeness and quality before going live.  This pattern is an ideal solution for companies that don&#39;t want to risk source language bleed through but are not willing to compromise publishing freedom.  But these benefits are not without cost, you do need to host three versions of your website and you need to build mechanisms for maintaining these snapshots.  The Translation Snapshot site can be relatively low powered because it will get only a limited amount of traffic.  If your site is simple and does not have any runtime server-side logic, both snapshots could be static HTML files hosted on Amazon S3. This can be done pretty easily with &lt;a href=&quot;http://www.contenthere.net/2012/01/fun-with-static-publishing.html&quot;&gt;GNU wget&lt;/a&gt;.&lt;/p&gt; </content><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/4581798799371107152/posts/default/1606623666301673018'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/4581798799371107152/posts/default/1606623666301673018'/><link rel='alternate' type='text/html' href='https://www.contenthere.net/2015/03/double-international-snapshot.html' title='Double International Snapshot'/><author><name>Seth Gottlieb</name><uri>http://www.blogger.com/profile/01233710343214501624</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-4581798799371107152.post-1718268836532767838</id><published>2015-03-16T09:25:00.001-04:00</published><updated>2015-03-16T09:25:38.815-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Product Management"/><title type='text'>The Three Worlds of a Product Manager</title><content type='html'>&lt;p&gt;One of the most challenging aspects of being a product manager is that your mind needs to simultaneously exist in three worlds &amp;mdash; three different realities: the present, the near future, and the distant future.  Let&#39;s go through them one-by-one.&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;strong&gt;The Present&lt;/strong&gt;&lt;br/&gt;  This is the state of the product that everyone is using right now.  To the product manager, however, the present feels like the past because it contains features and characteristics that he thought through long ago.  The most relevant function of the present is as a tool to learn more about users and decide what the near future should look like.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;The Near Future&lt;/strong&gt;&lt;br/&gt;  The near future feels like the present because it is the world that the product manager&#39;s mind spends most of its time in.  The product manager is looking at mockups and prototypes and thinking about the sequence of when to deliver near future features.  If you follow lean product development, release cycles are short and the actions are pragmatic and concrete.  The picture of the near future is clear enough that it feels like present day.  We do weekly releases so the near future can be real this week, the next, or the week after. If you use feature flags, the near future may be the current state for some users.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;The Distant Future&lt;/strong&gt;&lt;br/&gt;  The distant future may not be that far away on the calendar (maybe a few months), but to the product manager, it is science fiction.  The distant future never arrives; pieces of it merge into the near future but the rest keeps on being pushed off.  Because knowledge and priorities are constantly changing, the product manager can&#39;t get too attached to the distant future.  More than likely, the product manager is juggling multiple possible distant futures simultaneously in his head.  The whole purpose of the distant future is to put the near future into a larger context and to force the product manager to extrapolate where decisions for the near future may ultimately lead.  &lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Your product exists in a different state in each of these parallel universes and you need to know  every detail about each of these states because people look to you as the expert.  It is hard to keep these details from getting muddled together in your head and harder still to not confuse others as you talk about the product. &lt;/p&gt;&lt;p&gt;The hardest time to avoid confusion is when discussing a product road map.  The best approach is to talk about the near future.  Stick to three months or less with the details weighted towards the first month.  With this horizon you are safe to talk about sequencing and dates but the most important topic is &quot;why?&quot;  You are rapidly responding to an opportunity, testing a hypothesis, or incrementally building towards something bigger. The reason for an enhancement should fall into one of those three categories. Describe the distant future as a vision that influences your general direction.    Don&#39;t commit to details or dates.  You just need to paint a picture that shows that the next steps in the journey are worth the effort. &lt;/p&gt;&lt;p&gt;The other time when the three worlds confuse stakeholders is when they request a feature.  Often what they ask for fits into a larger vision. For example, they might ask you to fix something that you plan to replace with a different approach.  You need to adjust your perspective to their present (which feels like your past) and then take them through time to show your plans for the near future.  You might also need to take them forward a few releases more to describe how you want that feature to evolve. &lt;/p&gt;&lt;p&gt;Navigating back and forth across the present, near future, and distant future feels a lot like time travel.  It is disorienting when you context-shift into a particular time period and sometimes the past feels a little embarrassing when you come back from the future. Like a hero in a time travel movie, sometimes you need to repair the future by going back into the past.  There is never a dull moment in product management.  If you think things are boring and routine, you need to get your mind over to where the action is.&lt;/p&gt;   </content><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/4581798799371107152/posts/default/1718268836532767838'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/4581798799371107152/posts/default/1718268836532767838'/><link rel='alternate' type='text/html' href='https://www.contenthere.net/2015/03/the-three-worlds-of-product-manager.html' title='The Three Worlds of a Product Manager'/><author><name>Seth Gottlieb</name><uri>http://www.blogger.com/profile/01233710343214501624</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-4581798799371107152.post-8354605871971790243</id><published>2015-02-24T14:57:00.001-05:00</published><updated>2015-02-24T19:21:43.720-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="drupal"/><title type='text'>Drupal is to web development as Powerpoint is to design</title><content type='html'>&lt;p&gt;I was recently talking with a friend about how hard it is to find a good Drupal developer.  While Drupal is the &lt;a href=&quot;http://trends.builtwith.com/cms&quot;&gt;second-most widely used CMS&lt;/a&gt;, finding developers who know how to work with it properly is really challenging. I think there are three reasons for this.&lt;/p&gt;&lt;ol&gt;	&lt;li&gt;Drupal is so ubiquitous that most PHP developers have had at least some level of exposure to it.&lt;/li&gt;	&lt;li&gt;You can get a lot done in Drupal without knowing what you are doing.&lt;/li&gt;	&lt;li&gt;Most of the people hiring Drupal developers are not able to evaluate the quality of the work.&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;In thinking about this, an analogy came to mind:&lt;p&gt;&lt;blockquote&gt;Drupal is to web development as Powerpoint is to design.&lt;/blockquote&gt;&lt;p&gt;PowerPoint is everywhere.  Anyone who knows a little bit of PowerPoint, and can search the web for images, can convince himself that he is an adequate designer (or at least a good visual communicator). But the more you care about design, the more horrifying these amateur presentations are.  PowerPoint itself isn&#39;t bad.  If you do have good design skills, PowerPoint can be an incredibly powerful design tool. But there are more bad designers working in PowerPoint than good designers.&lt;/p&gt;&lt;p&gt;Similarly,  Drupal has a huge library of modules that you can install and configure about as quickly as you can drop an image onto a slide.  An expert Drupal developer will know what modules to use, have good judgement of when to use them, and have a solid process for testing and managing configurations.  A Drupal amateur is unaware when he is creating a mess that is going to create embarrassing situations in the future.&lt;/p&gt;&lt;p&gt;So how do you separate the wheat from the chaff in the Drupal developer ecosystem? I tend to focus on three areas:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;The types of sites the developer worked on.  Wrong answer: &quot;I build Drupal sites all the time.&quot;&lt;/li&gt;&lt;li&gt;How the developer finds modules to use.  Wrong answer: &quot;I just search for them.&quot;&lt;/li&gt;&lt;li&gt;How the developer manages configurations across environments.  Wrong answer: &quot;I just click boxes.&quot;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;By asking these three questions, I can usually get an idea of expertise and craft that a Drupal developer applies to his work.  Happy hunting!&lt;/p&gt;</content><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/4581798799371107152/posts/default/8354605871971790243'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/4581798799371107152/posts/default/8354605871971790243'/><link rel='alternate' type='text/html' href='https://www.contenthere.net/2015/02/drupal-is-to-web-development-as.html' title='Drupal is to web development as Powerpoint is to design'/><author><name>Seth Gottlieb</name><uri>http://www.blogger.com/profile/01233710343214501624</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-4581798799371107152.post-374386867458050413</id><published>2015-01-08T08:31:00.000-05:00</published><updated>2015-01-08T08:31:07.353-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="collaboration"/><title type='text'>Rediscovering Private Chat</title><content type='html'>A few weeks ago, I moved my development team from Skype to HipChat for chat-based collaboration. &amp;nbsp;All the buzz around this new breed of collaboration services (such as HipChat, Slack, and Flowdock) was making me curious. &amp;nbsp;I had used private chat room technology like IRC and Jabber in the past with mixed results. &amp;nbsp;I also used to work for a company that made a product called &lt;a href=&quot;https://mindalignhub.aditi.com/&quot;&gt;MindAlign (which looks like it has been frozen in time since 2004)&lt;/a&gt;. &amp;nbsp;In every case, these services were initially popular and then people drifted away to other tools such as AOL Instant Messenger (AIM), Yahoo! Instant Messenger (YIM), Microsoft Messenger, and Skype. &amp;nbsp;People preferred consumer chat services because you can also use them to communicate with your non-work friends. Nobody wants to run more software on their computer than they need to. &lt;br /&gt;&lt;br /&gt;Times have changed. YIM and AIM are basically irrelevant only to be replaced by tools like Apple Messages, WhatsApp, and Viber. &amp;nbsp;But I think that there are bigger differences in play.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Smartphones have conditioned us to multiple channels&lt;/h3&gt;Now pretty much everyone runs at least two computers: a workstation on our desk and a personal computer in our pocket (our smartphone). &amp;nbsp;These two computers have different roles. &amp;nbsp;Your workstation is very clearly for work and your smartphone is focused on digital communications. &amp;nbsp;The smartphone has the best chat network of all (SMS because it is ubiquitous) and it is easier to use now that we have a keyboard. &amp;nbsp; The new chat services (WhatsApp, Viber, Apple Messages, Facebook Messenger) are all focused on the smartphone market. &lt;br /&gt;&lt;br /&gt;Chat-based collaboration tools like HipChat don&#39;t have to compete with personal messaging services. It is easier for them to coexist because they live on separate devices.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Twitter and Facebook have built new habits&lt;/h3&gt;&lt;div&gt;Twitter and Facebook have had a major impact on how we consume information. &amp;nbsp;We are now much better at handling rapidly flowing feeds of information. &amp;nbsp;We are less intimidated by the volume and we have built habits around scanning back since we last checked. &amp;nbsp;As senders we have built habits around posting things multiple times for people who access different stretches of the timeline.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;These skills make it easier to handle group chat services like IRC and now HipChat/Slack/Flowdock.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;h3&gt;Integrations make chat collaboration tools more powerful&lt;/h3&gt;&lt;div&gt;I know that IRC bots have been around for ages but the new breed of chat-collaboration tools have an amazing collection of integrations. &amp;nbsp;After setting up HipChat, it was really easy to hook in the other tools that we use: Bitbucket, Codeship, and ZenDesk. &amp;nbsp;Now that I am better at handling feeds, it is nice to have all of these notifications in one place other than my email inbox. &amp;nbsp;My hope is that email can be used less for notifications and just for messages that I need to respond to. &amp;nbsp; That may drive email volume down.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;h3&gt;Why change?&lt;/h3&gt;&lt;div&gt;As a distributed team that does better with written communication than voice, we rely heavily on chat. &amp;nbsp;Skype was good for 1 on 1 chats but not so great for group chats because it is difficult to get back into a group chat and scan the latest if you closed the window. &amp;nbsp;With HipChat, many of the conversations that used to be 1 on 1 are in an open forum and there is an open invitation to eavesdrop and chime in. &amp;nbsp;It feels a lot more like an office where people are co-located. &amp;nbsp; We even greet each other when we log on.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;But the biggest win is in the integrations. &amp;nbsp;Part of that is having notifications in one shared space. &amp;nbsp;It&#39;s like an &lt;a href=&quot;https://www.atlassian.com/wallboards/information-radiators.jsp&quot;&gt;information radiator&lt;/a&gt;&amp;nbsp;in a physical office. &amp;nbsp;Everyone can see it and, when something changes, everyone can talk about it. &amp;nbsp;For example, when we get a ZenDesk ticket notification, everyone sees it at the same time and we can chat about who is going to take it and how to resolve it. &lt;br /&gt;&lt;br /&gt;But there is more to it than centralization. &amp;nbsp;I feel the incentive to write better Git commit messages when I know they will go into the stream. &amp;nbsp;People are naturally more thorough and provide more context when writing for a larger audience. &amp;nbsp;Then, if our continuous integration system (Codeship) raises an error, everyone in the room can get complete context of what the code change was, who did it, and the thinking behind it. &lt;br /&gt;&lt;br /&gt;A chat collaboration service like HipChat (or others) has huge advantages over tools like Skype. &amp;nbsp;It is especially helpful for us because we are a distributed team; but even in a co-located work environment, chat collaboration could bring the benefits of an open floor plan without the &lt;a href=&quot;http://www.inc.com/jessica-stillman/open-plan-offices-are-crazy.html&quot;&gt;downside&lt;/a&gt;. &amp;nbsp;If you really want to focus on something, you can mute the conversation by shutting down the app and catch up when you come back up for air. &amp;nbsp;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/4581798799371107152/posts/default/374386867458050413'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/4581798799371107152/posts/default/374386867458050413'/><link rel='alternate' type='text/html' href='https://www.contenthere.net/2015/01/rediscovering-private-chat.html' title='Rediscovering Private Chat'/><author><name>Seth Gottlieb</name><uri>http://www.blogger.com/profile/01233710343214501624</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-4581798799371107152.post-1835744890531980961</id><published>2015-01-07T16:23:00.001-05:00</published><updated>2015-01-07T16:23:34.760-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="google"/><category scheme="http://www.blogger.com/atom/ns#" term="off-topic"/><title type='text'>Back to Blogger</title><content type='html'>&lt;span style=&quot;font-family: inherit;&quot;&gt;In case you noticed something different, I moved this blog back onto the Blogger platform. Actually, Blogger is where Content Here started back in 2004 (Wow! A little over 11 years ago!). Over the intervening years, I converted the site to Wordpress and hosted it on a number of different providers. Some of the formatting shows that the posts are a little worse for wear. &amp;nbsp;And I need to do some theming work. &amp;nbsp;If you notice any other major problems, let me know.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Data ownership and control were the primary reasons for moving off of Blogger. W&lt;/span&gt;hen my website was a core part of my consulting business,&amp;nbsp;&lt;span style=&quot;font-family: inherit;&quot;&gt;$20.00 per month seemed worth it. Now that blogging is back to being a hobby and Google has a &quot;&lt;/span&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Google_Takeout&quot; style=&quot;font-family: inherit;&quot;&gt;Data Liberation Policy&lt;/a&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;,&quot; Blogger makes more sense.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Moving from WordPress to Blogger definitely feels like going against the grain but this article &quot;&lt;/span&gt;&lt;a href=&quot;http://google.about.com/od/googleblogger/a/How-To-Move-Your-Blog-From-Wordpress-To-Blogger.htm&quot; style=&quot;font-family: inherit;&quot;&gt;How to Move Your Blog from WordPress to Blogger&lt;/a&gt;&quot;&lt;span style=&quot;font-family: inherit;&quot;&gt;&amp;nbsp;gave excellent instructions plus a good explanation of why you would want to do it.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;In addition to great utilities for both Blogger and Wordpress, one of the things that made migration easier was that I hosted all of my images and files on Flickr and other sites. &amp;nbsp;That means that there was less to move.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;My experience so far is that Blogger seems like a less cared for part of the Google ecosystem. &amp;nbsp;It&#39;s clunky when compared to Wordpress or other web content management systems that I have used. I am sure that Google+ (and before that Google Wave) have consumed most of the attention. &amp;nbsp;I can&#39;t imagine that Google would kill blogger, but if they do, there is always Google Takeout. &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;</content><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/4581798799371107152/posts/default/1835744890531980961'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/4581798799371107152/posts/default/1835744890531980961'/><link rel='alternate' type='text/html' href='https://www.contenthere.net/2015/01/back-to-blogger.html' title='Back to Blogger'/><author><name>Seth Gottlieb</name><uri>http://www.blogger.com/profile/01233710343214501624</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-4581798799371107152.post-8084601451771250305</id><published>2014-12-10T02:06:00.000-05:00</published><updated>2015-01-06T14:28:49.173-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="python"/><title type='text'>Nan, you are not a number</title><content type='html'>Here is a little programming oddity that we ran across yesterday.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://ondemand.lionbridge.com/&quot;&gt;onDemand&lt;/a&gt; has a number of downloadable Excel reports.  To generate a useful Excel file, it is important to tell the Excel library what data type to make each cell.  To facilitate this, we had a little utility function called is_float:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;code&gt;def is_float(data):&lt;br /&gt;&lt;br /&gt;    try:&lt;br /&gt;        float(data)&lt;br /&gt;        return True&lt;br /&gt;    except Exception:&lt;br /&gt;        return False&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;That seemed reasonable enough and it worked fine for quite some time. But then we had this customer named Nan (thanks for the business Nan!).  The problem with the name Nan is that float(&#39;Nan&#39;) doesn&#39;t return a ValueError like float(&#39;Bob&#39;).  float(&#39;Nan&#39;) successfully returns a float object with a value of &#39;nan.&#39;  The reason for this is that Nan, in addition to a being fairly common name (I went to school with a girl named Nan), is Python shorthand for a &quot;Not a Number.&quot;  Python&#39;s float function interpreted the input &#39;Nan&#39; as an attempt to create a float object with a value of &#39;nan&#39;.  This caused our logic to try to tell the Excel library that &#39;Nan&#39; was a number and that created an error.  Incidentally, we would have had the same problem with someone named &quot;Inf,&quot; which is Python shorthand for infinity.&lt;br /&gt;In case anyone is curious, the fix for this was quite simple:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;code&gt;def is_float(data):&lt;br /&gt;&lt;br /&gt;    try:&lt;br /&gt;        int(float(data))&lt;br /&gt;        return True&lt;br /&gt;    except Exception:&lt;br /&gt;        return False&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The int function doesn&#39;t try to be as clever.  It rejects cheeky floats like nan and inf.  You learn something new every day!</content><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/4581798799371107152/posts/default/8084601451771250305'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/4581798799371107152/posts/default/8084601451771250305'/><link rel='alternate' type='text/html' href='https://www.contenthere.net/2014/12/nan-you-are-not-number.html' title='Nan, you are not a number'/><author><name>Seth Gottlieb</name><uri>http://www.blogger.com/profile/01233710343214501624</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-4581798799371107152.post-1024852426939505558</id><published>2014-12-08T08:27:00.000-05:00</published><updated>2015-01-06T07:30:25.540-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Product Management"/><title type='text'>Priorities</title><content type='html'>&lt;p&gt;Prioritizing is hard when other people&#39;s requests fight for your attention.  It is stressful.  You feel attacked; and when you constantly shift your priorities in response to whoever cries the loudest, you get nothing done and you feel defeated.  As hard as it is to prioritize your own time, prioritizing what to improve in a product is even harder.  The decisions you make on a product have such a large impact.  Living under this stress of competing priorities is the life of a product manager. Here are some tricks that I learned.&lt;br/&gt;&lt;/p&gt;&lt;ol&gt;&lt;br/&gt;&lt;li&gt;&lt;strong&gt;Create and publish a model for prioritization.&lt;/strong&gt;&lt;br/&gt; &lt;a href=&quot;https://www.evernote.com/l/AAKeIn_FejpGIL6zx5T8Hmfdri1GirRnN7g&quot;&gt;My prioritization framework looks like this&lt;/a&gt;.  Being transparent about how you prioritize serves three functions: it sets expectations; it encourages stakeholders to express their requests in terms that you can easily evaluate; and it forces you to adhere to your own rules.  &lt;br/&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Don&#39;t elevate the priority of one request.  Push everything else down.&lt;/strong&gt;&lt;br/&gt;  It is easy to fall into a cycle of urgency inflation where each request tries to one-up the others in priority.  Hysteria builds and you go into reaction mode as you try to keep up.  When I feel like this, I try to visualize calmly but firmly pushing other requests down.  You only have so much capacity.  The highest priority thing should be whatever you are working on right now.  It can&#39;t get any higher than that.  Everything else will have to wait.  It feels empowering to actively push requests down to make room for the one request that cannot be deferred. The alternative is passively accepting every request&#39;s own self stated importance.  That feels horrible.&lt;br/&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Group niggling little things into a single item.&lt;/strong&gt;&lt;br/&gt;  One risk of prioritization is that some of the little things never get done.  Individually, these details never get to the top of the stack.  But in aggregate, they do matter.  User experience is all about the details &amp;mdash; sanding down the snags that get in the way of delight.  To solve this, I like to group some of these requests together to give them a fighting chance against some of the larger initiatives.  &lt;br/&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Strive for continuous improvement rather than immediate perfection.&lt;/strong&gt;&lt;br/&gt;  Your application is not perfect today and, no matter what you do, it will not be perfect next month.  Rather that succumbing to the pressure of immediate perfection, focus on continuous improvement.  One of my favorite articles about product management is &quot;&lt;a href=&quot;http://www.codesimplicity.com/post/suck-less/&quot;&gt;Make it Suck Less&lt;/a&gt;.&quot; While this sounds like an overly humble goal, software would be a whole lot better if every application was managed on this principle.  Besides, if you achieved perfection, your job as a product manager would be over.  &lt;br/&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Take a moment to celebrate your achievements.&lt;/strong&gt;&lt;br/&gt;  After you launch a new feature, resist the temptation to immediately jump to the next thing.  Get closure by reflecting on what you accomplished.  This will help in two ways: it will get you off the treadmill for a moment to enjoy your success; and it will allow you to evaluate what efforts have yielded the greatest impact so that you can be even more effective with your prioritization.  Personally, I find the best time for this reflection is when reviewing release notes before publication and when preparing for a team &lt;a href=&quot;http://retrospectivewiki.org/index.php?title=Main_Page&quot;&gt;retrospective&lt;/a&gt;.  &lt;br/&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;These practices work for me in product managing my own time.  Hopefully you will find them useful too.&lt;/p&gt;</content><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/4581798799371107152/posts/default/1024852426939505558'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/4581798799371107152/posts/default/1024852426939505558'/><link rel='alternate' type='text/html' href='https://www.contenthere.net/2014/12/priorities.html' title='Priorities'/><author><name>Seth Gottlieb</name><uri>http://www.blogger.com/profile/01233710343214501624</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-4581798799371107152.post-4293038486009090895</id><published>2014-09-22T12:18:00.000-04:00</published><updated>2015-01-06T07:30:25.520-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="development"/><title type='text'>Too Dry Anti-Pattern</title><content type='html'>&lt;p&gt;I do a lot of code reviews.  On average, I probably spend an hour a day looking at diffs.  I find this an efficient use of time because I frequently spot bugs that wouldn&#39;t be revealed by regular testing.  I can also prevent implementations that will create obstacles as we progress through the road map.&lt;/p&gt;&lt;br/&gt;&lt;p&gt;One of the &lt;a href=&quot;http://en.wikipedia.org/wiki/Anti-pattern&quot;&gt;anti-patterns&lt;/a&gt; that I have started to notice is what I call the &quot;Too DRY Anti-Pattern.&quot;  For the uninitiated, DRY stands for &quot;Don&#39;t Repeat Yourself&quot;.  It is a primary tenet in one of my favorite books: &lt;a href=&quot;http://www.amazon.com/gp/product/020161622X/ref=as_li_tl?ie=UTF8&amp;camp=1789&amp;creative=390957&amp;creativeASIN=020161622X&amp;linkCode=as2&amp;tag=contenthere-20&amp;linkId=EEQKRFOE4EFAJXKX&quot;&gt;The Pragmatic Programmer: From Journeyman to Master&lt;/a&gt;&lt;img src=&quot;http://ir-na.amazon-adsystem.com/e/ir?t=contenthere-20&amp;l=as2&amp;o=1&amp;a=020161622X&quot; width=&quot;1&quot; height=&quot;1&quot; border=&quot;0&quot; alt=&quot;&quot; style=&quot;border:none !important; margin:0px !important;&quot; /&gt;.  Keeping your code DRY means using methods and functions rather than copying and pasting code and not storing the same information in multiple places.  I have written about &lt;a href=&quot;http://contenthere.net/2010/07/keeping-your-content-dry.html&quot;&gt;DRY in terms of content management&lt;/a&gt; in this blog before.&lt;/p&gt;&lt;br/&gt;&lt;p&gt;The Too DRY anti-pattern starts with the good intention of keeping the code DRY.  The developer creates a function or method to avoid having the same code exist in lots of places.  However, over time the developer starts to use that function in places that do not quite fit.  The function gets more parameters and has increasingly complex internal logic to control its behavior in different cases.  Too DRY functions are easy to spot.  They have lots of intricate if-then logic that try to address a wide diversity of usage.&lt;/p&gt;&lt;br/&gt;&lt;p&gt;A counter-weight to the Too DRY anti-pattern is the &lt;a href=&quot;http://en.wikipedia.org/wiki/Unix_philosophy&quot;&gt;Unix philosophy of doing &quot;one thing and doing it well.&quot;&lt;/a&gt;  When you run into a Too DRY function, use the Unix &quot;one thing&quot; philosophy to break it down.  Perhaps create smaller functions that do specific elements of the larger Too Dry function and then have different functions that use those building blocks in different ways.  Also, repeating code isn&#39;t always a bad thing if the code is small and performs a discrete function.  For example, if you have some code that creates an object and sets its properties, it is OK to have similar instances of this logic if the properties need to be set to different values.&lt;/p&gt;&lt;br/&gt;&lt;p&gt;Like all things, best practices need to be applied thoughtfully rather than as rigid rules.  So keep your code DRY, but not at the expense of simplicity.&lt;/p&gt;</content><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/4581798799371107152/posts/default/4293038486009090895'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/4581798799371107152/posts/default/4293038486009090895'/><link rel='alternate' type='text/html' href='https://www.contenthere.net/2014/09/too-dry-anti-pattern.html' title='Too Dry Anti-Pattern'/><author><name>Seth Gottlieb</name><uri>http://www.blogger.com/profile/01233710343214501624</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry></feed>