• Skip to main content
  • Skip to footer

InRhythm

Your partners in accelerated digital transformation

  • Who We Are
  • Our Work
  • Practices & Products
  • Learning & Growth
  • Culture & Careers
  • Blog
  • Contact Us

inrhythmAdmin

Dec 07 2016

The Key to Product Management? User Experience

prod-manager

Product Managers (PdMs) are the advocates for the business and for the end-user of a Product, and in this sense, they not only own the vision and requirements for the product, but also the user experience. In a small startup with limited resources, the Product Manager role can potentially be executed by a single individual. However, perfecting the Product Management framework demands strong comprehension of divergent skillsets, the ability to execute, and the time to do so, which one person typically does not have. To be successful, PdMs must align and engage closely with User Experience professionals, rather than tackle everything on their own.

As owners of the user experience, Product Managers must have complete understanding of the users. The insight required goes far beyond answering simple questions such as “who the users are”, “what they need,” “what their pain-points are,” and the eventual creation of moss-covered personas. PdMs must work with User Experience Researchers, experts in investigating (identifying potential causes of the issues) and triangulating (validating user experience findings with quantitative analysis), to gain 360 degree insight into the users. Without complete awareness, the vision (and eventual roadmap, objectives/key results, and backlog) cannot be genuinely validated, and the chance of building the product that your users need greatly diminishes.

On all but the easiest and most straightforward products, it’s impossible to jump directly to creating wireframes and diving into the sprints. To ensure that the user experience aligns to the user needs, PdMs must team and align closely with User Experience Designers to create the information architecture, taxonomy, interaction design, libraries of design patterns, and content strategy. Skipping this step is a surefire path to creating a framework that does not align to the user needs, and also ensures eventual rework, increasing the overall chance of product failure. This effort must be done in advance of the sprints, as Designers will not have time during sprints to think through the end-to-end solution while at the same time creating wireframes for stories, which will reflect poorly on the Product Manager, not User Experience.

Following the release of features, the PdM must then measure the success of what has been developed using both traditional analytics and the User Experience Research framework, to answer the following questions:

  • Do the features meet the needs of the customers?
  • Do our customers use the features as expected?

Regardless of the answers, the PdM must figure out how to translate them into action, deciding to either continue with the current plan/backlog, or to pivot. Maximizing return on investment is key; pivoting takes a great deal of time and effort (sometimes completely returning to the drawing board). The only way to combat this risk is to engage with User Experience early, and at every step of the process. Without this bond, it’s very difficult to validate that you’re building the right product, in the right way, and to truly be an advocate for your users.

Written by inrhythmAdmin · Categorized: InRhythm News

Sep 06 2016

InRhythm Named Fastest Growing Company Four Straight Years in a Row

InRhythm is proud to announce that we have once again earned a coveted spot on Inc. 5000’s Fastest Growing Companies list. We have become a strong leader in the industry and a trusted partner for enterprises seeking to experience modern software development. Using cutting edge technologies to develop highly scalable and secure web applications and platforms, InRhythm is at the forefront of delivering incredible value at the highest velocity.

Over the past four years, InRhythm has witnessed tremendous growth in its consulting practice areas: modern software engineering, lean UX, and enterprise Agile. In the last year alone, we have welcomed several new high profile enterprise clients to our portfolio.

Founder and Chief Executive Officer, Gunjan Doshi, credits InRhythm’s team of inspirational and hard-working thought-leaders and their customer-centric focus with the company’s 165% growth. In his words, “Thank you to everyone at InRhythm and our clients for helping us achieve this important milestone. Our team is focused on creating a value-driven, high-growth business. We take great pride in knowing that more and more enterprises are choosing InRhythm as a preferred partner in their journey of building modern software development centers of excellence. Our thought leadership in the world of Agile, Lean UX and design thinking, and modern engineering makes us a strong and reliable partner.”

According to Vice President of Engineering, Jack Morgan, “The focus on modern engineering practices is what makes InRhythm such a success. Our engineers are helping to bring new centers of excellence to our clients, and they are regularly seeing delivery results at a much faster pace and higher standard of quality than ever before. InRhythm has doubled in staff this year and we look forward to continued growth in 2017.”

Vice President of Business Development & Agile Practice, Gary Scharf, adds, “Our growth is aided by the fact that our focus is narrow but deep. We work in partnership with our clients from the Application to the Organization in helping them transform by taking advantage of technologies and processes that help them compete in their markets.

—

To those of you reading this, thank you! Thank you for supporting our vision and constantly coming back to read our content. We couldn’t have done it without you!

 

Written by inrhythmAdmin · Categorized: InRhythm News

Jul 11 2016

Code Challenge Accepted (And Answered)

One of engineers challenged our entire team with the following task:

 

Code challenge (in js, obvi).
Write a one-liner that outputs (int) 10 using only the following symbols: “+”, “[” and “]”
Oh, and you have to explain your answer.
Extra credit: Same restrictions, output (string) 20.

Now if you want to play around a little bit and try and figure out the answer – feel free! Make sure to drop your answer or logic in the comments below. Let us know if you want to see more challenges on the blog as well.

 

But for those of you who want to dive right into it – here is our answer explained!

 

What happens when we perform a math operation on an empty array?

 

+[] // 0

Int 0. Int-eresting, it looks like javascript automatically type casts our array into an int.

 

Now, using some basic cs principles we can have some fun. Let’s try outputting int 1. We know that we can get 0 from +[] so let’s try to increment it

 

++[] // Invalid left-hand side expression

Well… that sucks. However, we’ve got another trick up our sleeve. We can shove our outputted 0 into an array, access index[0] and then increment that.

 

Huh?

Just watch, you’ll get it.

 

[+[]]
That’s our array[0], now let’s get to that precious 0 it’s keeping safe for us.

 

[+[]][0]
Bingo, but we can do better. We know +[] is zero, so we can access the 0 index using +[] instead

 

[+[]][+[]]
Bang, we’ve got our 0 again. But we’ve already had a 0, what’s the difference? I’ll tell you. Nothing… except that this 0 won’t throw an invalid left handed expression error when we try to increment it.

 

++[+[]][+[]]
And there’s our int 1.

 

Let’s try and get a string 20. Seems pretty easy. We can take our newly created int 1 and increment that to a 2 then just add a string 0. But how do we get a string 0. Simple. We just add two arrays together. That makes sense, right?

 

[]+[] // empty string

Now, what happens when you add a string and an int? It gets cast as a string.

 

[++[[++[+[]][+[]]+[]]][+[]]]+[+[]] === "20" // true
Have fun wrapping your head around that one.

 

barney-more-challenges

Written by inrhythmAdmin · Categorized: Software Engineering · Tagged: challenge, code, development, engineering, growth, JavaScript, puzzle, software

Jun 20 2016

Blockchain Blockchain Blockchain – More Than Just a Buzzword

Last week our in-house developer lead us through a thrilling talk on Smart Contract Development. We have full video coverage for you to dive in with us.

Smart Contracts are computer programs which automatically execute the terms of a contract. This is usually facilitated by building them on the blockchain. Imagine building a Yelp where you do not have to worry about Yelp removing negative reviews for advertisers. Imagine building an Uber which cannot be forced by the 15 minute law. Imagine building a whole new category of applications where you are not restricted by the limitations of what legal and financial institutional framework.

Written by inrhythmAdmin · Categorized: Events, Software Engineering

Jun 09 2016

The Current State of {{Angular.SEO}}

Pretty URLs

Angular, by default, is configured to use hashbangs (#!) to denote a new page or state of the site/application. Url’s with a hashbang aren’t technically considered new pages by site crawlers. These type of urls are partials/fragments and are generally bad for SEO. Crawlers don’t index the content of fragments, by design, since they’re not technically considered a full page.

However, google is claiming that “we’ll generally crawl, render, and index the #! URLs”, from a blog post dated Oct 2015. This announcement doesn’t come as a complete surprise, since googlebot is chrome, but it still is a relatively new feature. There are mixed reports online about whether or not it actually works and regarding how long it actually takes for it to index the page(s). Some people are reporting up to two weeks to get indexed. This is, of course, a google only feature and consideration for other search engines should be made.

Fortunately, there is a relatively simple fix for the dreaded hashbang URLs – HTML5 History API – and Angular provides us with an easy way of leveraging this API with minimal effort. Instructions on how to convert an already existing application can be found here.

Internal anchor links need to be converted from the hashbang format so that they can be read by the crawler. Links that use ng-click to change state should also be converted to use ng-href.

Pre-rendering

The best practice previously proposed by google webmasters blog was to use escaped fragments to serve pre-rendered stateless versions of dynamic pages. This has since been retracted as a best practice in favor allowing google to fetch js and css resources via the robots.txt file so that the page can be natively rendered by their crawlers.

Other crawlers are most likely not as sophisticated as google’s so there is probably still a need to serve pre-rendered pages to those bots. However, it should be noted that serving a crawler a different version of a site might be considered “cloaking”, which is generally very frowned down upon by search engines.

There are several paid 3rd-party services that provide pre-rendering for SPAs: seo.js, brombone and seo4ajax are among the most popular ones. There is also an open-source self-hosted solution, prerender.io, which might be worth looking into.

<meta type=”data” />

If google does in fact render dynamic JS pages with their crawlers then it would be safe to assume that modifying theandtags with JS would suffice.

There is an angular module that can handle meta tag content switching which supports ngRoute and simple states in ui-router. It also supports Facebook Open Graph Protocol and Twitter Cards.

Almost all online resources also mention that a sitemap.xml would be greatly beneficial for SEO, since the bots will first follow all those links before blindly crawling around the site. Care needs to be taken to make sure that there are no dead links within the sitemap as that can lead to a negative impact on SEO.

Conclusion

While google’s new JS site crawler sounds like it’s the holy grail of SPA+SEO, there are still some steps that need to be taken in order for the crawlers to be able to do their jobs.

  • Pretty URL’s both as anchor hrefs and in the URL bar
  • Allow JS and CSS resources to be fetched via robots.txt
  • Include a sitemap.xml

Google does hold >65% of the search traffic for the U.S. so there is still a fairly large (35%) gap regarding Bing, Yahoo and Yandex crawlers and whether or not they’re able to render and properly index SPA’s. Since Yahoo is powered by Bing and Bing tends to follow behind google pretty closely, it’d be safe to assume Bing/Yahoo will have SPA indexing capabilities very soon, if not already.

FaceBook, Twitter and other social media sites also employ some sort of site crawlers to enable rich social sharing, those bots almost certainly do not render JS.

Ultimately, the most optimal solution is a mixture of serving certain bots the user facing site while others get a pre-rendered stateless version which uses the escaped fragments solution.

—

Written by InRhythm Engineer Vitaly Isikov

Written by inrhythmAdmin · Categorized: Software Engineering

  • Go to page 1
  • Go to page 2
  • Go to page 3
  • Interim pages omitted …
  • Go to page 14
  • Go to Next Page »

Footer

Interested in learning more?
Connect with Us
InRhythm

110 William St
Suite 2601
New York, NY 10038

1 800 683 7813
get@inrhythm.com

Copyright © 2023 · InRhythm on Genesis Framework · WordPress · Log in

This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish. Cookie settingsACCEPT
Privacy & Cookies Policy

Privacy Overview

This website uses cookies to improve your experience while you navigate through the website. Out of these cookies, the cookies that are categorized as necessary are stored on your browser as they are essential for the working of basic functionalities of the website. We also use third-party cookies that help us analyze and understand how you use this website. These cookies will be stored in your browser only with your consent. You also have the option to opt-out of these cookies. But opting out of some of these cookies may have an effect on your browsing experience.
Necessary
Always Enabled
Necessary cookies are absolutely essential for the website to function properly. This category only includes cookies that ensures basic functionalities and security features of the website. These cookies do not store any personal information.
Non-necessary
Any cookies that may not be particularly necessary for the website to function and is used specifically to collect user personal data via analytics, ads, other embedded contents are termed as non-necessary cookies. It is mandatory to procure user consent prior to running these cookies on your website.
SAVE & ACCEPT