I’ve been part of a couple tiny conversations in the past few days which have been insignificant on their own, but together made me want to open a broader conversation.
The question is this: when a Mathesar user opens a ticket, how do we know when it’s appropriate to close that ticket?
I’ll start with an analogy…
Last summer I was having a problem with the air conditioning in my house. The HVAC condenser unit in my basement was accumulating water in its drip pan that was overflowing onto my basement floor. I hired a company to fix it. The first tech did a bunch of troubleshooting and decided to replace the condensate pump. New pump — no more water on floor! Or so he thought… The drip pan took a few days to fill up with water, after which point I had water on my floor again. They sent out a different tech who walked into my house holding second replacement pump, apologizing that they had apparently swapped my defective pump for yet another defective one. Despite my suspicion, I deferred to them because I didn’t have the time to get my head into the project. The second replacement pump did not stop the water on my floor. Neither did a replacement condensate drain pipe installed by the third tech! What finally did the trick was the fourth tech who came out and looked at the problem more holistically. My filter needed to be changed! The filter was blocking airflow. The lack of airflow was causing ice to accumulate in are area of the condenser not designed to catch its drips. The melting ice bypassed the drainage line and condensate pump altogether.
~ ~ ~
How does this relate to us?
We have so few users right now that I think we need to treat them like gold. Every user interaction is an opportunity for us to learn about how people are using Mathesar and to evangelize our product. Every user interaction is also a risk wherein our response might dissuade the user from continuing to interact with us.
The two conversations I’m referring to are:
In this email
thread I suggested that we leave a ticket
open in order to continue a conversation with the user and
get more feedback about our direction. Kriti suggested we
keep the ticket in the v0.1.3
milestone and assign it to me. There’s some nuance here, but
to me that approach seems to reduce the user’s problem to making
column type inference optional. Yes, the “optional
inference” piece of puzzle is assigned to me and
in this milestone. But there are potentially many other
things to do as well that might also prove to be other
important pieces to the puzzle the user is trying to solve.
With many people working on one project, there is a real danger to getting focused on tasks and forgetting to return to the user’s original problem. This is like the guy who walked into my house holding a new condensate pump. Someone else had already formed the assumption that I needed a new pump. Then the tech’s task was “replace pump”. His task should have been “fix water on floor”, because that was my original problem.
In this Matrix chat, Pavish said “I’m concerned it wouldn’t actually solve their problem”. That’s the same concern I’m trying to relay with this email. In this case Dom closed a ticket after we added some support for unknown pg types. But that’s not the problem the user reported. The user said:
When I connect to an existing schema, which was built on the Graphile Starter project, there are no tables.
I think this is a real gift this user has given us! They’ve provided very clear instructions on how to reproduce the problem. Granted, following those instructions may require some time. But that time would be well-spent I think. I’d be inclined to spend at least a few hours chasing that down before closing this ticket or asking the user to try again. I think it’s really worth it try try hand-holding users like this as much as we can, because I think it’ll help us learn a lot in the process.
Closing user-reported tickets is really a very new process for us! As such, I think it would be healthy to discuss it a little. It makes sense that we all may have slightly different approaches to that process. And I think it would useful to try and get on the same page about it.
My suggestion is that we should generally err on the side of keeping user-reported tickets open until either: (A) the the author confirms we’ve addressed their problem, or (B) the author fails to respond, or (C) we feel very confident that we’ve fixed it (i.e. by fully reproducing the problem ourselves exactly as the user described). This approach would require us to splitter user-reported tickets off into more-specific pieces that we can close more eagerly, just to properly track and organize our work.
If we were drowning in tickets and users and money I would absolutely not want to take the approach above. I would be much more inclined to close user-reported tickets eagerly. But given our early stage, I think it makes sense to hold tickets open for longer to signal that we’re still engaged in a conversation with the user about their problem, and that we still want to hear from them about the our ideas and our approaches to fixing their problem.
We have so few users right now that I think we need to treat them like gold. Every user interaction is an opportunity for us to learn about how people are using Mathesar and to evangelize our product. Every user interaction is also a risk wherein our response might dissuade the user from continuing to interact with us.
Kriti,
Thanks for your support on this topic. I hope I’m not belaboring it by sending another long email, but this topic seems important right now, and I have some follow-up thoughts.
My approach with GitHub issues is that each issue is an action item
I’d like to suggest a subtle alteration to this approach.
I see the tickets we create as action items — nothing more, nothing less. And the vast majority of the action items described by our tickets are code-related action items. When the the PR is merged, the ticket is closed. Then we put the ticket out of mind and move on. I’d like to avoid this mindset with users’ tickets.
I see the tickets that users create as a mix between action items, support requests, sales leads, and user research. Sure, we could conceivably lump all of these concepts into “action item”, just with different actions. But we are so accustomed to associating one ticket with one code-related action item that I think it may be helpful to adopt a different metal model for user tickets so as not to lose sight of those other goals.
One problem is that we can’t rely on users to clearly communicate code-related action items within their tickets. That leaves the door open for us to inadvertently form suboptimal assumptions about the best action to take. I think it’s worth approaching user-reported tickets with a healthy does of skepticism about our action items, always seeking to reinforce and validate those actions through very explicit user feedback.
Another problem is that “support requests” require more follow-up and hand-holding than pure code-related action items. For example in No tables visible when viewing an existing schema, I get the impression that we really left the user hanging, wondering what to do next. I would argue that the reason we left the user hanging is that we approached this ticket with the same type of action item in-mind as we would with one of our tickets — a code-related action item. Dom wrote a comment explaining why he was closing the ticket. That comment would be very commonplace for tickets we authored. But user tickets like this give us a (currently rare) opportunity to do a lot more to engage our users. Here’s my suggestion for how we might consider handling tickets like this in the future (with that ticket as an example):
@notramo
We’ve merged #3040 which we think might help with this issue you’re having.
- Before that change, Mathesar would crash when it encountered a PostgreSQL type for which we hadn’t provided explicit compatibility. Types like
citext
andpoint
are examples of such types.- After that change Mathesar no longer crashes when it encounters such types. However, it only offers limited functionality for such types because much of Mathesar’s behavior is type-specific. We still have more work to do to test Mathesar with implicitly-supported types and identify additional improvements that may be necessary to offer graceful degradation for these types without crashing. For example, sorting, filtering, and editing data of those types may still be problematic. We’d love to have your help testing Mathesar under this scenario if you’re interested! Please comment on this issue with any questions or additional information you can provide.
Our goal is to eventually offer full support for all PostgreSQL types, but this inevitably take some time, as we are building this functionality incrementally. We have tickets to track support for citext and point, but we are prioritizing support for new types on an as-needed basis. Are there any other types that you think would be important for us to prioritize soon? If so, feel free to open new tickets for those types.
I’ve done some rudimentary testing using Mathesar to access the PostgreSQL database from the Graphile Starter Project. Before #3040 was merged, I was able to reproduce the problem exactly as you described it. After merging #3040, I can see all the tables, as shown below.
(insert screenshot here)
Mathesar 0.1.3 will be released in about 3 weeks and will include this fix.
If you want to get this fix sooner, you can use this special docker image and updated the install script in this branch. Install with:
bash <(curl -sfSL https://raw.githubusercontent.com/centerofci/mathesar/2023-06-27/install.sh)
Note that we don’t recommend running the above version of Mathesar in production because it is subject to further testing before our release in order to identify and fix any regressions from our current cycle of development. We’ll also eventually be pushing
develop
Docker images to our Docker Hub, that work is tracked in #3076.Would you be interested in testing the pre-release version above and reporting back with your findings to verify that we’ve fixed this problem for you?
If we don’t hear from you in 2 weeks, we’ll close this issue. Thanks for your help!
That comment asks the user questions. It invites the user to follow up through a variety of channels. It gives the user a lot more context about what we’re doing. It gives them clearer instructions for what to do next.
This email is not to say that we should have made a comment like the above. I definitely wouldn’t have thought to write all that before now! It’s more to suggest that, as we’re learning from our users (with that ticket as an example), we may want to consider comments like the above going forward. Those more hand-holding type of comments admittedly require much more effort! But I think it’s worth it for us to prioritize that work right now, especially given the relatively low frequency of user-reported issues. I’d be happy to help with crafting such comments any time someone asks!
Procedurally, we could consider applying a label like “status: waiting” (or a new label) to tickets when the ball is in the user’s court. I think it’s also worth it to avoid placing open user-reported tickets in our current milestone in order to encourage longer, more-nuanced conversations with the user about their needs without blocking our release on those conversations.
I see the tickets we create as action items — nothing more, nothing less. And the vast majority of the action items described by our tickets are code-related action items. When the the PR is merged, the ticket is closed. Then we put the ticket out of mind and move on. I’d like to avoid this mindset with users’ tickets.
I see the tickets that users create as a mix between action items, support requests, sales leads, and user research. Sure, we could conceivably lump all of these concepts into “action item”, just with different actions. But we are so accustomed to associating one ticket with one code-related action item that I think it may be helpful to adopt a different metal model for user tickets so as not to lose sight of those other goals.
Procedurally, we could consider applying a label like “status: waiting” (or a new label) to tickets when the ball is in the user’s court. I think it’s also worth it to avoid placing open user-reported tickets in our current milestone in order to encourage longer, more-nuanced conversations with the user about their needs without blocking our release on those conversations.
@ricnov this issue should be fixed in the last release (0.1.2).
Would you be interested in verifying that your reported problem is indeed fixed?
If not, we'll close this issue in 2 weeks.