XY Problems and You: Develop better questions for your problems

I’ve noticed many XY Problems appearing on Help and Feedback. In light of this, I wanted to create a thread introducing some links related to the XY Problem and talk about it as it relates to the DevForum; what is it, why it’s an issue and what we can do to avoid it.

The XY problem does have a dedicated explanation website. For quick reference’s sake, of course, XY Problem on Wikipedia. Both are acceptable sources for learning about the XY problem. I personally find that the former is easier to understand and gain information from.

Understanding the XY Problem and avoiding it is very helpful for when you create threads in the future, whether it’s on the DevForum or any other support location. You may have a great question and all, but there may be a better solution or even a broader picture being missed out on.

While the links above are great ways to explain what the XY problem is, I feel a third explanation may be helpful when it’s specific to the forums. As a developer who didn’t understand this term, let alone know it existed shortly before this tutorial was created, allow me to explain.


What exactly is the XY Problem?

The XY problem refers to asking about an attempted solution, Y over the actual problem, X. This is often because the user doesn’t understand the root issue so they attempt to apply a fix which in itself is faulty or the user doesn’t know how to do, this spawning a second issue. Problem X is then shelved while the user tries to ask for help repairing solution Y.

What is the issue with an XY Problem?

The root issue often does not get addressed in an XY scenario. Solution Y either doesn’t solve problem X, is a poor resolution or just serves as a band-aid fix. Band-aid fixes should not be relied upon as they are temporary and do not resolve the underlying root issue.

What is an example of an XY Problem?

I will be using a recent example of an XY problem that I’ve encountered here. I feel this would be a great example to use since it’s also easy to break down and address.

X (root problem)
Place1 is experiencing input lag. Controls are not responsive.

Y (attempted solution)
Send the player to subsidiary games depending on their device type.

Secondary problems

  • Developer is not sure how to fetch the device that a player is using.
  • Input lag isn’t actually addressed.

As you can see from the above, the developer is experiencing input lag in their game. As opposed to trying to diagnose the source of input lag, they resolve to teleport a player to different games based on their type of device and shelve input lag.

There are many reasons why leaving input lag unaddressed and hopping over to teleporting users around is a problem. Other than the very obvious fact that input lag can still occur, there is a list of other reasons why this is not a good idea.

Interested?
  • Roblox does not natively support a way to check what device a player is using. The way developers have done this so far is to check what input devices are enabled on the client as well as what types of input they are passing via UserInputService.

  • You will separate your communities. The way matchmaking works on Roblox allows for users to play with their friends, no matter what device they’re using. If you, a mobile user wants to play with your friend, a computer user, you will not be able to due to differing devices. That is assuming this teleport system is actually implemented.

  • Maintenance will become significantly difficult for you. Suppose you have a game that spans across several places. In order to properly implement this system, you now need to make different versions of all of these places: computer, mobile and possibly Xbox. Your place count is now inflated against the formula n2 (n3 with Xbox) where n is the number of places. So if you have a 10-place game, get ready to maintain 20-30 places.

How can the XY Problem be avoided?

Using the example above, the question could’ve been left at “my game is experiencing input lag”. This question would serve as your base. From here, you can either ask some questions such as how to explore performance issues, post code that may potentially be causing client-side lag or do some other self-investigation into the problem.

Most likely, input lag has to do with performance or actual code - that’s assuming it only happens in that one place and nowhere else. There are many debugger tools available to you as a developer on Roblox Studio - three good starting places are the F9 Developer Console, the Script Performance window (this article includes a general article on performance) and the MicroProfiler.

For other matters, even including programming, there are lots of forums beyond the DevForum. For example: if you do modelling there is the Blender Forums (if you use Blender) and surely a lot of content you can find with a Google Search about how to do something.

For best results in receiving help about an issue, try applying these practices:

  • Include as much information as you can from the getgo. Others require a starting point to work off of to help in investigating or solving your root issue. Less questions are asked to dig information out of you and more time is spent towards providing potential solutions.

  • Before responding about an attempted solution not working, make sure to fiddle around with it a bit. If still that doesn’t work, feel free to create a response with information about your test. Don’t just say a solution hasn’t worked for you; explain how it doesn’t work and get some console screenshots if you can.

  • Explain what solutions you’ve already attempted and how successful they’ve been. One of the solutions may actually be the key to tackling the problem but you may just be confused as to how to properly implement it.

  • Always try doing things yourself first before posting a thread, or test before replying about something. You can often get an answer quicker than waiting hours for responses. If your own attempts aren’t fairing well, feel free to create a help thread but also be sure to try tinkering with your problem while waiting for responses. You can depend on us as the DevForum is a learning and helping environment, but don’t be too dependent!

I hope this has been of some use to you. There’s a lot of reading here, I understand, but I would write it out again if it meant I could provide something for the community to learn from. :slight_smile:


(Read on GitHub)

51 Likes
Is there a way to count all threads on a client?
Animate weapon not parented to character
Help with making < or > variable
How to make lights that you can shut on or off?
How to see how much the value has changed?
Level Limit does not seem to be working correctly
How to Use Or Correctly?
.Activated not firing for all players
Im having a problem with a pet system using welds
Anti Malicious Plugin Script-script?
How do I bind MouseHold to ContextActionService?
Mouse Lock On Mobile
Possible change rigs on pressing a key?
Hiding the Developer Console if it's opened
Best way to creat a smooth Vector3 to Vector3 transition loop?
How do I play a sound once with GetMarkerReachedSignal?
Wait until a script is disabled
Using a loop to designate and formulate Regions
Using varargs without having . . . as an function argument?
Trying to move Part to position "Not Working"
Introducing colbert2677, Hobbyist Developer and Platform Enthusiast
Issue with forking Chat
How do I use UpdateAsync()?
Sorting a dictionary by the value
What can cause memory leakage?
Debounce is too slow?
Moving character arms to a specific position
How to use isKeyDown() on UserInputService?
If I Use GetAsync twice, what is recommended amount of players?
Best way to make characters invisible?
Table Problem, random insertion
Fetch Player's ID through use of TextBox?
:LoadCharacter() Issue
How does one find the right tool grip
How do I end a thread from a script?
Sending objects between servers
How to check if an instance is "local only"?
Teleporting players to the actual "game server" from the "lobby server"
Marketplace not checking

I completely agree with this, although it would be hard to prevent people from asking these questions because of the large amount of users asking basic questions because they think this forum is to help them just find a solution, as opposed to figuring out the actual issue.

2 Likes

The idea is not to prevent, rather it is to raise the existence of this form of asking questions, why it’s undesirable and how to chip away the problem towards a proper question - or begin with a proper question at all.

As always feel free to correct, help or guide members towards better questions and so that understanding can be met by both you, them and everyone involved.

1 Like

Just wanted to make a little bit of a notice in regards to this thread. I recognise this is somewhat of a bump post and I apologise in advance for doing so.

Originally when I created this thread, it resided in Community Resources. Some time later it was moved into the Inception Category, however due to the category’s rename, I felt that it was a miscategorisation to have a thread on the XY Problem be in Forum Feedback and thus have brought it back to Learning Resources under Tutorials.

Normally I’d leave it in Community Resources where it originally was written, though it feels more appropriate as a tutorial. It not only discusses an ever-present topic but also sheds some tips to improve various threads, especially those asked within Development Support. It leans more towards a tutorial or advice article than a resource alone. I’d also like to keep this publicly available since its applicability extends far beyond the DevForum.

As always, I’m open to feedback on the thread or any parts of the source material that I’ve misinterpreted. I’ll make the corrections necessary to keep this thread clean, informative and resourceful as it should be. Misinformation in a tutorial is not a pleasant thing.

Thanks all, enjoy your day. Happy developing.

6 Likes

Hey all! 8 months later and I’ve made a few relatively major updates to this thread such that I feel it warranted a post highlighting the changes. I’m on a quest to update some of my tutorials right now. I especially wanted to update this one since it’s still relevant (I still see XY problems often!).

A lot of updates I’ve performed were in order to update the currency of information from minor things such as the name of the support supercategory to reviewing my facts and understanding of the XY problem. I also changed some wording to sound better. I had created this thread fairly recently after learning about what the XY problem was and I may still have holes in knowledge, so please feel free to drop feedback if I’ve got something incorrect still.

The XY problem example has better formatting now, so it’s much easier to follow what is being mentioned. Before, I had an ugly mess of a column that was just italics beside more text. It wasn’t very easy on the eyes compared to what I’ve changed it to (yay blockquotes!). The example wasn’t very well explained either, but I do believe it is now. There’s much more context behind the example and better information to sport my stance on why it’s an XYP and why the proposed solution is bad.

Finally, I’ve made the bullet points at the bottom of the thread much easier to read by spacing them out. I’ve updated the text to better reflect what I want to convey in applying best practices with creating support topics and have added a fourth point in light of this.

If you fancy GitHub, I do have this tutorial uploaded there. A link to the article on GitHub is posted at the very bottom of the article, take a look if you’d like. You can also find my other tutorials via there.

Cheers all and thank you for stopping by.

2 Likes