-
Notifications
You must be signed in to change notification settings - Fork 1.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Paths Upcoming features #5665
Comments
@neilkakkar feel free to adjust based on what you think we should add/remove for near term deliverables |
Thanks for putting this forward @EDsCODE! Some things that immediately come to mind,
|
|
Thanks @EDsCODE,
|
and the counts are, say, the reverse. The time to convert is like a proxy for how much effort it takes to go down this path, which can lead to insights like: All focused users quickly go from homepage to signup, while users coming from random sources, like HackerNews either just keep the tab open for a while, or go to places other than the CTA. Even if there are outliers, the key is that they're removed from all path considerations, and what you're comparing is 2 averages, or 2 medians: from A->X, from A-Y, and from A-Z. It's the relative difference of the averages that is insightful. A contrived example, and maybe something like this never happens in real life, but I think it's worth testing it out. Thoughts? |
I think this was from before our chat today, but yeah might be worth trying, we could potentially see some valuable information as you suggested. If we pair this up with the median (or maybe even instead) we should get a pretty good understanding of what's going on and any potential impact around effort. |
This is mostly an update to show some progress on design. I only have a couple of hours into this so far, so it is extremely early. Any feedback you have is welcome with that context in mind 😅 This is mostly a process shot to show how I'm thinking we could visualize paths, fixed and variable path steps, value distribution, etc. In the example below I am working with redundant headers that I'm using to summarize the highlighted path, but also layer in affordance for excluding events, adding more steps, etc. I'm also thinking about how we might implement this in a way that is similar to funnels. This is generally the same layout, but with rectangles filling the available space in the column to represent the distribution of paths / events for that step. Notably absent from this mockup is any concept of a sankey diagram. I'm not sure they're needed to be effective here. |
I like the direction! + I like the structure that this provides to path flows. Sankey diagrams get pretty chaotic - one point that's not clear with this visualization is how you would end up seeing the multitude of connections between events when you're not highlighting a specific flow. Multitude connections meaning that there could be several events in the first column and each of them could be connected to several in the second column. |
Looking great! Love the lack of sankey. To add to @EDsCODE's feedback, it's also not clear how you would highlight complete drop-offs. Also worth adding absolute numbers and percentage numbers to each step. |
Thanks for the feedback. I was thinking dropoffs could just look like dead ends in the path - no connection to the subsequent column and color changes to look less actionable. The step summary in the top the chart would have absolute and percentage numbers. Event connections would be represented by starting at the same offset, or at an offset within the original bounds of the previous step. Hovering will highlight the exact path taken, but the relationship would still be communicated via the alignment mentioned previously. We would also see events repeated across multiple steps - For example in the previous comment, we might see "view product page" as the second largest event in step 2, but it also accounts for a large portion of step 3. |
I feel like I didn't do a great job explaining the event/path context in the previous examples. Here are a few illustrations that show how subsequent events are drawn in the context of the preceding event. Because we're representing total volume with height, we show subsets of that total potential volume in subsequent steps. This work just like funnels, except we have multiple paths in each step. Because of this, distinct paths tile under paths with a higher volume of sessions. In this way we always represent subsequent paths in the context of the previous path. Note that this is for path starting from a given point. the opposite would be tree of paths / events leading into a specific point. Hopefully that's a clearer explanation of how I'm approaching this right now. I'm happy to talk through the ideas on a call if that helps answers everyone's questions. Thoughts @paolodamico @EDsCODE? |
This makes a lot of sense to me! I guess then: there wouldn't be any headers like in the previous diagram? And all of the information (like path name, average conversion, %, count) would be either on hover, or inside the box itself? Or is the header like an extra bar that shows up on hover, showing the exact steps taken to get here? |
Oh sorry these are super bare bones wireframes. I should have said that. This is mostly me working out the visualization rules so I can be sure I communicate how we implement. I still need to layer in headers, menus, and other established things. I'm currently working through paths with starting and ending points specified. After that I should be ready to draw and share some higher fidelity work. |
Ah, when I said "header" I meant this: I wasn't being 100% clear either. But yeah, the basic concept makes sense to me. And it seems a lot more clearer than sankey diagrams. One thing that remains unclear to me with such a representation is: how does merging back work? For example, if in the second bar you havs X, Y, Z events, all of which are followed by the A event, would we then have 3 different A events in the 3rd column? (one corresponding to the context of each of X, Y, Z) ? I think where sankeys stand out is merging these back together well: makes it clear that this particular path item is popular, showing how N events lead to it. Thoughts on how best to represent this? |
I was seeing that header bar as a summary of the highlighted path. So if you're hovered over checkout in step 5, it summarizes the highlighted path to that point. If you moved your cursor down to a distinct event, you'd see the path change to reflect that route.
There's no re-aggregation of common paths / events to show the consolidated counts. Instead the popular paths / events are repeated in the context of the preceding step. So if you had a popular step (view product page) you'd see that repeated in the step column. |
Here are more process shots for how we might expose inline actions for steps and events. In this example, there is a fixed starting page (landing page). All subsequent steps will be shown in the context of the previous step. In this example, you'll see Note that this is the key difference between this visualization and a sankey diagram and gets to the heart of @neilkakkar's statement above:
This makes me wonder if we would benefit from distinct rendering modes - top paths OR top path items. Thoughts? https://www.figma.com/file/gQBj9YnNgD8YW4nBwCVLZf/PostHog-App?node-id=3260%3A37220 |
Trying to think through what users want out of Paths, and I guess I'm a bit unclear where most value lies.
(2) seems more often used to me, and the current designs solve for (2) well! Just want to make this explicit, that we're changing semantics of paths (and what problems they solve) with this upgrade. Could use some product input with what problems (1) solves? Side Note: Would be cool to have the option to |
The core user need behind our focus on paths is: If I break this down into a couple of sub-problems - both of these align with your point 2:
There is another problem Paths (sankey) solves for today - which I'm not certain is an important one (and when I say important - does it contribute strongly to our mission of more successful products in the world?).
Personally I think this is quite un-actionable and likely time consuming, in the same way watching 100s of session recordings at random is, I very much feel that solving for this use case will get people spending time on PostHog but not get them to make their product more successful. I'd be willing to take the controversial position of not supporting this use case and deprecating sanky diagrams - however on the condition that we validate this with 2 - 3 focus customers.
Yeah this could be a killer way to create funnels - Select the event you want people to achieve.... now here's your funnel. |
Highly aligned! Less options, but options more geared towards what users want to do helps (1) reduce overwhelm. (2) differentiate us from existing established analytics solutions. Like how getting to User Journeys in @mplitude was a pain (which is imo their best paths implementation), can appreciate how less is more. ... And then we'll grow big enough that users ask for more options, and then .... |
Precisely! If you don't know where users come from, and you have this target conversion event, you could start with Paths with (i.e. multiple paths ending at target event) and then they could create funnels out of any of them, and just from paths, get a glance of which paths are most successful, i.e. ones with the highest conversion rate. I like this a lot, and it's all enabled by this new visualisation. At the same time, I imagine our visualisation gets a bit unwieldy when there's too many different paths all ending at That is, you'd hover over the start event to highlight the full path, when target event is chosen. Not sure how confusing this gets. (A probably confusing suggestion: What if you discard dropoff counts? Everything ends at And when you choose |
Agree. Tech wise, we support both, neither, or either. (i.e. all combinations)
Prelim thoughts suggest no to me? They're events happening in succession for a single user, so highlighting types (as we consider them types) doesn't make sense to me: For the people looking at paths, it may be natural to track from, say, URL to screen deep link, so no point in highlighting, and the actual type-highlighting they may be interested in are something like breakdowns.
What does all mean here? All session lengths? I'm not sure how useful all is, since it captures the long tail: say you have 1 user who did 100 events in a session, so you'd need 100 steps to expand all, while most users would be within K steps (yes, I'm assuming a power law distribution here). |
Thanks @neilkakkar!
|
@EDsCODE I think either option can work, but I do think we need to make the query builder more consistent across insight types. That could happen as part of this issue, but really as long as the user can build the query, we'll be OK for now. |
Yes I think this is important, but until we have those icons ready I'm not sure we can act on it here. Might be best to treat that separately as part of #4266
Everything is actionable in the visualization, even drop-offs. I'll spend some time cleaning this up in the prototype and generally trying to align this to how we represent dropoff in funnels.
💯
This is a mistake on my part. I was going to change it all to "mark as important" to trigger the alternate styling.
See my response to @EDsCODE above. I think we need to tackle this work, but not necessarily as part of nailing paths. Generally a responsive layout that optimizes for larger screens and scales down to function for smaller screens would be ideal. It's just a matter of making that work across all insight types to give users a more consistent starting point.
These are intended to be overlays that expand to show the content of the shorter path items. When the value is sufficiently small, we lose the ability to display text inside the container. The idea here was to show that on hover, but give it a white background to mitigate any risk of contrast issues or readability. I think this will be more obvious after I get the prototype built.
I'll address this. Thanks.
@paolodamico I have an older example of what hovering over a collapsed group of path items looks like: |
Not sure if we want this to be part of V1, but right now, the UI allows choosing specific types of events to show, but we can also choose specific events to show on Paths (so, something like, show all Pageviews, "insight loaded", and "insight analyzed" events. That's one way of mix and matching). This is different from "Important Events" in the sense that it removes all custom events apart from "insight loaded" and "insight analyzed" from the Paths data. If we want to take this even further, we can also have filters on these custom events, like "insight loaded" with property_A = "blah". (Haven't implemented this on the backend yet, but fairly easy to do). This is similar to how we have funnel steps right now. I'm not sure how to display this, but I do think atleast the basic level of customizability makes sense for Paths. |
Thanks, @neilkakkar I will work to incorporate that into the designs. |
I think maybe we want to start enabling users to select specific events/actions but without filtering? My concern is that it'll add to much complexity to the interface right now and we're still unsure how this feature will actually be used, but @clarkus you may have better context on how it could fit the designs without being too intrusive? Not sure if having it as filters will be discoverable enough for users, but it's a matter of visualizing and testing. |
I am working on the "specific events" portion of this now. I dropped the concept of "important events" because it felt like it conflicted a bit with selecting specific events. I should have something for that later today. The prototype for user testing is also up-to-date. |
Here's one rough concept idea for building event lists for each supported type. I don't think this should be the solution, but it does demonstrate the concept I have in mind for picking events. The goal here is to make the picker inclusive - we want to default to showing lots of events, but still make it easy to clear the selection and pick exactly what you want to see. The key job here is browsing through event categories and selecting all, a subset, or none of those events to build a path visualization. Does something like this seem on target for how users might build more complex path visualizations? |
Oh, I like how this filters by type we care about.
For the basic event selecting (i.e. where we don't allow filters on selected events) 100% works. Another slightly related point is that the start point and end point filter dropdowns need something similar for selecting: If it's a pageview event, you input the URL. If it's an autocapture event, you input the element you care about. |
I think the way of selecting events here is pretty clear. It'll be really key how we implement this experience to make sure it can be used quickly and seamlessly so it doesn't create a pain for the user (e.g. expanding groups with results, search bar doesn't lose focus when you add/remove events, ...). On a separate topic, based on the conversation yesterday and after some thought, I think we should not support paths with autocapture at all. The information from there will be pretty useless unparsed and full of noise. I think what we eventually want to support is paths with actions instead. Happy to dive more into this. Thoughts @neilkakkar ? EDIT: Slack thread by @neilkakkar on the same topic. |
How would this work with a mixed case of included events? If I am including page views, screen views, and custom events, my starting point would have to match the format of one of those categories. If I am only including a subset of page view events, my starting event would have to match the specific formatting of one of those events. Is that accurate? Is this still an issue given that we're considering dropping autocapture events? |
Here is an updated version of the query builder that breaks the event selector out into distinct groups. Being distinct would simplify implementation, but it would also make it easier to scale the interface across a variety of viewport sizes. This would also align better with the step layout we use for funnels, which allows for inline filtering and other actions. |
For @clarkus @EDsCODE and @neilkakkar context - one of the issues that came up at the offsite was sometimes GitHub issues get really long (like this one) and its really hard for someone to catch-up to get context and unclear what decisions have / haven't been made. The proposed solution was to create a markdown file in posthog/meta or posthog/product-internal with the current state of any decision - so people can comment inline - and anyone new joining the conversation can catch up in a few seconds. Since I'm just back and this issue feels quite overwhelming - I was wondering if we might be able to try? I'm not certain who would be best placed to do this - since the issue was started by @EDsCODE but the majority of content is from @clarkus |
I'll start an asset to track this and then I'll socialize it so others can update as they see fit. Will post here shortly. |
Here are updated concepts that show a layout similar to the one used for funnels. In this case the query builder is broken into an event selection component, excluded events, and filters. This update also allows for the reuse of the existing filter component from other insights. This should allow a user to define an event set along with filters for each category of events (web, mobile, custom). |
Added feedback directly on Figma. Some meta-feedback: it's still hard to know where to give feedback on Figma because there are so many artboards. Maybe linking the specific artboard when asking for feedback or adding more organization comments on the file could work. Another topic. Should we merge screen & page views together and simplify? Most of the time you have either a mobile app or a web app (and very few users use paths with screen views, 10X less than pageviews). |
Thanks I am still thinking through how to facilitate these reviews in a structured way in figma. I started an internal discussion about this if you have any thoughts you want to share - https://github.com/PostHog/product-internal/issues/162 |
While working on the workflow that connects funnels to paths, it's becoming really obvious that we need a better solution for representing filtered events. #5229 is one solution that's been identified, but I wonder if we might work the currently selected values into the labels somehow, too. I feel like there's going to be a disconnect between funnels and paths if we can't ensure that primary identifier is shown prominently in each case. In this example case, the most meaningful representation of the query is the value for the property filter. |
I think - as we've decided elsewhere - it makes sense to not support properties in V1, as we're doing for filters. Except: By default, we support the Current URL property for So yeah, working these out for Pageviews and Screens make sense, but since we already know exactly how this looks vs a random property, should be easier to represent? |
That aligns with my latest understanding. Thanks, @neilkakkar |
Now that the Paths UI is coming together, one question about matching the API with the UI: On the UI, there’s 3 possible event types: Pageview events, Screen events, and Custom events. This misses a 4th category, which is implicitly included in the backend when no toggles are selected: PostHog internal events. (like, $autocapture, or $plugin_running_duration, or $identify, $pageleave, $Feature Flag Called). So far, I don't see a good reason for including these on Paths. And based on the UI, users would always select atleast one of the 3 possible categories to display paths, right? Just making the decision here explicit, checking if everyone's aligned. |
I think we can close this now? @EDsCODE @neilkakkar |
This issue has 7350 words. Issues this long are hard to read or contribute to, and tend to take very long to reach a conclusion. Instead, why not:
|
Here's a list of features to consider that will be implemented early next week:
Filter paths for cohorts(already works)Will update this ticket with specific parameters used in api as we implement.
Tagging @clarkus for a head start on designs. @mariusandra @liyiy @alexkim205 @paolodamico so you have context
The text was updated successfully, but these errors were encountered: