-
Notifications
You must be signed in to change notification settings - Fork 206
Add new SPECIAL_EVENT Cause to GTFS-realtime Service Alerts #577
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
base: master
Are you sure you want to change the base?
Conversation
hbruch
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
+1 for this addition.
In file spec/en/reference.md, SPECIAL_EVENT should be added as well, IMHO.
|
I really do not see a benefit over OTHER_CAUSE. This is just OTHER_CAUSE with a different name. |
Thank you for catching that additional reference! I added the new Cause there as well. |
It's certainly not OTHER_CAUSE with a different name, although if it were a 1:1 replacement that would speak to this being very sensible because that means whenever people are using OTHER_CAUSE they actually mean SPECIAL_EVENT. I don't think that's quite true, but others have commented in Issue #576 that 90%+ of OTHER_CAUSE usage is actually for SPECIAL_EVENTS. Questioning the benefit of specificity over "Other Cause" would imply we should question having the Cause field at all. Why specify Construction, Police Activity or Weather? I think Cause benefits riders with clues as to why a disruption is happening and how long it might go on. I recommend SimplifyTransit Alerts users include "why" in the Header field for that reason, and pushed hard for that when I was at VTA. In our discussion someone noted that agency websites and apps can use the specificity of the Cause to display icons, words, and other UI elements that help riders distinguish between alerts. |
|
While currently, this use case is captured by Other Cause, it is clearly not the same as Other Cause. Other is a catch all for unrepresented causes and this is a specific, and common, cause for delays or detours. A separate note on process: is a producer and consumer required before a vote can be called? |
|
Hi @ckraatz, Sergio from MobilityData here. Thanks for opening this PR! Could you please announce it in the GTFS-realtime mailing list? A short message letting people know that the PR is open and inviting folks to participate in the discussion would be more than enough, similar to the post you made for the related issue (#576). This will help comply with step 3 of the Specification Amendment Process. Thanks, and let us know if you have any questions! |
@stevenmwhite that is correct, as per step number 5 of the Specification amendment process. It's worth remining that this is a GTFS-Realtime change which is subject to this process, which at the moment is still separate from the GTFS Schedule governance. |
Because it is specific. And this proposal is as abstract as other cause. |
|
@skinkie I see your point. I think we just have to accept that all of these Causes fall on a specific-vague continuum (Strike on the specific end, Other on the vague end, others somewhere in between). That's why I like the cause_detail and effect_detail fields - they allow agencies to give riders more specific information that will help them understand what's going on. |
|
@Sergiodero I posted in the GTFS-realtime mailing list - thanks for the reminder of that step. Step 5 of the amendment process says it "should" be demonstrated prior to calling for a vote, but doesn't actually "require" testing. If producers and consumers can produce and consume any other Cause on the list, they can produce and consume this Cause. The Changes process defined here is focused on "Adding new fields to GTFS Realtime." That's the top-level heading on the page. This Pull Request wouldn't add any new fields or features, really, and it's entirely backwards compatible. That said, we'll work on producing an Alerts feed with an active alert using the SPECIAL_EVENT cause, if folks need to see that to feel comfortable voting. SimplifyTransit Subscriptions is also a GTFS-realtime Service Alerts consumer, but I assume we want another consumer to validate they can consume that feed without problems. @gcamp or @bdferris-v2 would Transit or Google be willing to consume that feed and confirm it generates no problems? Would your applications just ignore the added Cause? |
I would support specific causes like you pointed out FESTIVAL, MARKET, and I think it would be even better to take the TPEG standard for this list: https://github.com/SIRI-CEN/SIRI/blob/master/xsd/siri_model/siri_situationReasons.xsd#L165 |
|
@skinkie those of us who help agencies publish GTFS-realtime Service Alerts need to balance how the specificity of the data actually benefits riders with pragmatic ease-of-use that leads to actual alerts. More options = harder (AKA the Paradox of Choice). Staff - often very busy dispatchers amongst our customers - get overwhelmed, make mistakes, or simply won't create alerts if we make it too hard. I have personal experience publishing of service alerts and training others to when I managed Digital Communications for VTA. So I understand the user experience more than most (any?) of the alert tool vendors on the market. I also monitored Twitter and responded to customers during incidents. Unless you have experience publishing alerts for an agency or selling a popular product that helps staff do that, I'd ask that you trust the insights this proposal is based on. Personally, I think the Siri enumeration you shared goes to a level of detail I'm not sure is helpful ... bombDisposal 💣 😲, emergencyBrake, cableTheft, congestion AND heavyTraffic 🤔, vegetation 😆, lowWaterLevel AND highWaterLevel, fallenLeaves 🍂, foreignDisturbances. I'm very confident if we had hundreds of options we'd see a skyrocketing use of "unknown." |
|
Toronto GO Transit is entering fallen-leaves-related-delay season. |
We have and in use with several Dutch agencies, open source, obviously. https://github.com/stichtingOpenGeo/openebs2 |
|
@skinkie Does that application include all of those potential causes in the UI? Do you have any stats about how many alerts per year have each of those Causes applied, including the "unknown" cause? |
Of the national standard, yes.
Operational (vehicle, personal) and weather related are obviously in the top 3. |
In Germany there are thousands of bomb disposals per year (e.g. almost 3000 in a single year in the state NRW), and obviously some of them are impacting public transport operations. I would not say that having this as an alert cause is useless. It's then part of the software design to decide which alert cause is really relevant for a specific region and exclude the rest to keep the UI simple and usable. |
|
@skinkie @felixguendling @doconnoronca I can see you feel strongly about expanding the Cause field by adopting the more specific Siri list of causes. That's a big difference from what I'm proposing here (adding one Cause), which is in direct response to a request from one of our customers. I'd suggest that if you'd like GTFS-realtime Service Alerts to adopt all the Siri fields you could create an Issue to discuss that. I'm open to ideas, as long as the end result for agency staff is simple, pragmatic and relevant to their agency's needs. I'd suggest you also factor in the currently experimental cause_detail and effect_detail fields, which address a similar need but leaning towards customizability rather than standardization. It's clear that the Cause field is currently a list of Categories, not specific causes. There's a valid discussion to be had about whether the data standard should have categories, specific causes, or both. And if both, should those be in one list, or multiple? In the meantime, I hope you'll either support or at least not oppose this Pull Request (once I set up a demonstration/test). It will help agencies that have asked for it, and at least goes in the direction of adding to the list of Causes! |
|
I am against to add more vague ambiguous causes, that can perfectly fit in OTHER_CAUSE. As mentioned, for your specific examples I would support the change. Because that could also lead to something useful like icons or automatically generated text messages. |
|
@skinkie I won't be changing the Pull Request from adding SPECIAL_EVENT to adding a different Cause or additional more specific causes because those don't respond to customer needs expressed to me and two other companies. If you're going to vote -1 I'd appreciate you doing that now and stating your actionable feedback. @Sergiodero I'm also trying to understand better how the change process works. I noticed the change spec calls for "unanimous consensus yes with at least 3 votes." That's an oxymoron. There's no such thing as "unanimous consensus."
|
|
@ckraatz while GTFS-RT is not part of the new governance (yet), I am acting in that spirit. Hence I motivate you to change your proposal for the better. |
@Sergiodero could you help clarify how we'd apply the spirit of the new GTFS governance here? The voting rules for GTFS-schedule governance state
|
|
Thanks for raising this @ckraatz. First, we want to clarify that the new GTFS Schedule governance and the GTFS Realtime Specification Change process are two separate processes. Since this change impacts GTFS Realtime, we have to work with the current rules that govern GTFS Realtime changes. That said, we recognize this process is far from perfect and has many areas for improvement (including the language/terminology used, as you’ve pointed out.) Historically, though, the community has followed a consistent process that looks like the following. I’ll ask you to refrain from over-reading the wording of steps, as they’re meant to be an overview of the relevant steps, not the exact process.
This is how the community implements the voting and change process for Realtime. Though, I invite any community members to chime in if I’m missing anything or have misrepresented the process. There are definitely gaps and areas for improvement in this process, and there may be value in the future to consolidate them or at least bring the RT process closer to parity in terms of robustness and clarity to the new GTFS Schedule governance. But for now, they remain separate. As for the matter of enforcement, while MobilityData plays an active role in fostering a healthy discussion space and monitoring that the community follows the rules agreed upon, any contributor is capable of speaking up if they believe the process isn't being followed correctly. In practice, the process is based on discussion and mutual accountability to maintain trust, clarity, and collaborative decision-making. GTFS is community-driven specification, so it relies on healthy discussion where the advocate should work towards building consensus and trust rather than “win” arguments. Disagreements are natural, but we want to encourage contributors to engage constructively and respectfully so that this discussion translates into changes that deliver value for everyone using GTFS. When discussions risk reaching a dead end, the best next step is often to bring in more voices from the community for additional input and perspective. We’d recommend that approach here to help move the discussion forward. |
|
I shared an update about the status of this proposal with our customer who made this request initially, and she wanted me to pass along her comments.
|
|
+0 OpenGeo, specialEvent is part of the SIRI enumeration list too, so from that point of view "look it is interoperability!" But I personally I think we should refrain from adding ambiguous things. We would implement it, if available. |
Thank you @skinkie for getting us to consensus. Having cast a +0 vote myself, I think that's a great way to express your perspective. |
|
Thank you both for sharing your voting intentions. Just a reminder: the voting period hasn’t opened yet. @ckraatz, it’s up to you to decide when the (minimum 7 days) discussion period has been sufficient to build consensus, and then move the proposal to testing before a vote can be called. |
|
Wanted to chime in on the discussion to say that Swiftly is in support of this proposal. Internally, we already produce a separate cause for special events, and have over 30 agencies that have found it useful to distinguish between special events and "other" already this year. |
|
PVTA (a transit agency/producer) is in support of this modification. As an agency that must accommodate numerous special events (like parades, street festivals, triathalons, etc.) throughout the year, we feel this is an important enough and frequently-used enough category that it's worth distinguishing from We are also a Swiftly customer, and we appreciate that Swiftly has added this to their tools that we use every day for the same reasons. |
@jmchatton thanks for weighing in! You make a very good point about how riders use Cause to inform their journey planning. Another example is police activity, which can indicate the situation is far outside the agency's control and it's very hard to know when it might end. Mentioning "event" internally or in text without tying that to the data standard doesn't reach riders in the same structured way as adding Special Event to the data standard, which will close that gap for your and your riders. |
|
Taking the queue from @phil-swiftly's comment providing actual stats, here's some of ours for 2025 which places me pretty firmly in the camp of supporting this change:
|
|
@westontrillium that's fantastic data - thanks for sharing! Clearly there's latent demand for this addition.
|
|
@ckraatz I actually did incorporate 7 alerts into my OTHER_CAUSE count which were mischaracterized as "UNKNOWN_CAUSE". :) I found a few cases this year where staffing shortage is cited as a reason, but it's much less than 30-40%. There were a few where the root cause could plausibly be driver shortage but it wasn't advertised explicitly in the alert. Unknown cause has included many things including traffic causing general delays, road obstructions/closures, or just notices about a recent change in the schedule/route wherein "unknown" is really being used as "N/A" (and thus should not have actually been defined by the user). |
|
@westontrillium I stand corrected! Do you think the UNKNOWN_CAUSE provides any real value to agencies or riders? What if they just selected OTHER instead of UNKNOWN? We're planning to remove it from our list of options. The only reason I can see for Unknown is in more automated contexts where one system is pulling in Alerts that didn't have a defined Cause, so they apply Unknown. But if an agency publishes alerts saying the Cause/Effect of the Alert are Unknown, it's not a good look. |
|
Following @westontrillium's lead, some stats on Arcadis' customers:
Given these stats and the fact that several agencies have reached out to express interest after seeing this PR, Arcadis is in support of this proposal. |
Slight correction: this PR follows the GTFS Realtime Specification Amendment Process, thus the next steps differ slightly from what was previously mentioned. Since the minimum 7-day discussion period has passed, once you feel there’s sufficient support for the proposal, you can start seeking a producer and a consumer to test the changes. |
Summary
Adds a new Cause called "Special Event" to GTFS-realtime Service Alerts, to fill a gap affecting many producers.
Describe the Problem
Many producers find it difficult to select a Cause from the current list in certain common situations, and we've heard complaints from customers about this.
I'm proposing to add SPECIAL_EVENT to address this. Capturing alert causes also provides more structured data, which could be used to display Alerts in certain ways on agency websites and potentially in apps.
Use Cases
SPECIAL_EVENT would be the appropriate Cause to select in the following common scenarios faced by many agencies:
Proposed Solution
Add SPECIAL_EVENT to the Cause list as option 13 as follows:
// Cause of this alert. If cause_detail is included, then Cause must also be included.
enum Cause {
UNKNOWN_CAUSE = 1;
OTHER_CAUSE = 2; // Not machine-representable.
TECHNICAL_PROBLEM = 3;
STRIKE = 4; // Public transit agency employees stopped working.
DEMONSTRATION = 5; // People are blocking the streets.
ACCIDENT = 6;
HOLIDAY = 7;
WEATHER = 8;
MAINTENANCE = 9;
CONSTRUCTION = 10;
POLICE_ACTIVITY = 11;
MEDICAL_EMERGENCY = 12;
SPECIAL_EVENT = 13; // A special one-time or recurring event such as a parade, festival, performance, farmers market, or sporting event.
}
Type of change
GTFS Schedule
GTFS Realtime
Additional Information
Discussed and supported in this Issue: #576
Proposed Discussion Period
Since this is clearly needed and will have minimal effect on producers and consumers that don't use it, I propose the 7-day voting period.
Testing Details
Testing isn't required, as this is just adding a new value to an existing core field.
Proposal Update Tracker
Checklist