[GUIDE] How to give constructive feedback to developers

Search This thread

joe_coolish

Retired Recognized Developer
Mar 26, 2010
755
234
American Fork
In the world of software development, applications pass through many phases before being released, some of which include designing, planning, coding, testing, Alpha Release, Beta Release, Release Candidate, and finally Release. This guide is intended to help the people involved in public/private beta tests that do not have experience programming, but would like to give valuable feedback to the developer.

Disclaimer
This guide is specific to programming for the Windows Mobile Operating System, specifically for the .net Compact Framework 3.5. However, the main concepts should translate over to other platforms and frameworks.

In the beginning...
First off, programming is hard. Building applications that run smoothly and are bug free require considerable amounts of time and energy. In short, software development is an emotional investment on behalf of the developer.

Because software development is an emotional investment, developers will easily take offense to criticism. This is where rule number one of giving constructive feedback comes in:

Rule number #1, When Giving feedback, be polite!


During my time on XDA-Developers I've been very happy with level of professionalism demonstrated by its members, but every once in a while I'll see a comment like, "This app sux!" or "Eff Dat shiz!".

Always remember, rude comments only distract other users, cause contention, and cause the developer to become less motivated (less emotionally involved) to produce software. If the application is not working on your device, remember the developer is the first person who will be able and willing to help you resolve your problem, so they should be the last person you want to offend. [1]

This is where the term Troll comes from. A troll is not the ugly monster that lives under the bridge, but is someone who is like the fisherman that "trolls" the river for fish (or heated response in the case of internet trolls)

Rule number #2, be constructive!

What's interesting about this rule is that the phrase "be constructive" in itself is not constructive. So how do you "be constructive"? Labeling a comment as constructive is not deterministic, or in other words there is no formula to test whether or not your comment is constructive. The rules in this guide will attempt to give you some pointers to giving constructive comments, but in the end, only a mix of common sense and human reasoning can determine if a comment is constructive.


Some examples of non-constructive comments
  • The app is broken
  • "It" crashes all the time!
  • I get an error message, plz help!
  • When will the app be finished?
  • etc
Rule number #3, if the app crashes include details about the crash

Let's be honest. Programmers aren't perfect. In a list of common excuses given by programmers in response to different bugs, the number one response was "Well, it works on my machine!". If you are a developer you know this is true! I catch myself using this phrase all the time! But, what can we learn from this? Well, first, the crash/bug you are having might not have ever been seen by the developer (if it had, chances are they would have fixed it!). Because of this, you must include as much relevant information about the bug as possible.

What is considered relevant? That is the million dollar question. I will attempt to give some guide-lines on how to determine what is and what isn't relevant.

Rule of thumb: When in doubt if info is relevant, include it.
It is hard to include too much information (hard, not impossible), but it is very easy to provide insufficient information to the developer.

What did you do?! Is it reproducible? What did you expect to see?
The crash isn't your fault. But if the developer doesn't have the steps to take to reproduce your error, they can't find the bug!

When you get a crash, first thing you need to do is try and remember as many steps as you can to reproduce the bug. Then, restart the app and follow the same steps to try and get the crash screen again.

You need to tell the developer if the crash is Always reproducible or only sometimes reproducible. Then you need to create a list of steps to get the crash. Try and always use an ordered list when doing this. It makes it easier to read and follow.

Finally, tell the dev what you were expecting to see and what you actually saw. Some bugs don't crash but instead produce results that aren't exactly what was expected. For example, "I clicked on the 'Read' button, it won't let me read the page!" Well, the bug in this case could be that the word "Read" is ambiguous and really means "have Read" as in "I have read the page already, so mark the page as 'Read'". This is a "What I expected and what I got" error. All the info that is required is the steps to reproduce, what you were expecting and what you got.


What is your device/ROM/Windows version?
Sometimes this is necessary, so if your device is not in your signature, include it! If it is in your signature, include it anyways!

The Crash Screen
If you are lucky enough to get a crash screen, most likely you will be able to supply enough information from the error message to the developer for them to figure out what went wrong.

If you receive the following message (or a translation there of), you must take an additional step in order to get the real crash message:
"An error message is available for this exception but cannot be displayed because these messages are optional and are not currently installed on this device. Please install ‘NETCFv35.Messages.EN.wm.cab’ for Windows Mobile 5.0 and above or ‘NETCFv35.Messages.EN.cab’ for other platforms. Restart the application to see the message."

This error message means you don't have the right software installed to display the crash message. To fix this, load the appropriate cab onto your device. Message cabs are located at: C:\Program Files (x86)\Microsoft.NET\SDK\CompactFramework\v3.5\WindowsCE\Diagnostics

If that directory does not exist, install the Power Toys for .NET Compact Framework 3.5 and check again.

Anatomy of the Crash screen.

Here is a crash details report from my XDAFacebook application. I will describe each part and what they mean, what's important and what the programmer is looking for:
XDAFacebook.exe
ObjectDisposedException
at Microsoft.AGL.Common.MISC.HandleAr(PAL_ERROR ar)
at System.Drawing.Graphics.DrawImage(Image image, Int32 x, Int32 y)
at XFControls.XFPanels.XFPanelList.PanelPaint(Graphics g)
at XFControls.XFPanels.XFPanelBase.OnPaint(PaintEvent Args e)
at System.Windows.Forms.Control.WnProc(WM wm, Int32 wParam, Int32 lParam)
at System.Windows.Forms.Control._InternalWnProc(WM wm, Int32 wParam, Int32 lParam)
at Microsoft.AGL.Forms.EVL.EnterModalDialog(IntPtr hwnModal)
at System.Windows.Forms.Form.ShowDialog()
at XDAFacebook.SplashScreen.SplashTimer_Tick(Object sender, EventArgs e)
at System.Windows.Forms.Timer._WnProc(WM wm, Int32 wParam, Int32 lParam)
at System.Windows.Forms.ApplicationThreadContext._Int ernalContextMessages(WM wm, Int32 wParam, Int32 lParam)
at Microsoft.AGL.Forms.EVL.EnterMainLoop(IntPtr hwnMain)
at System.Windows.Forms.Application.Run(Form fm)
at XDAFacebook.Program.Main()

The first line: XDAFacebook.exe is the application that crashed. This is important, because if the application relies on multiple .exe files, the one that crashed needs to be known. Always include which .exe crashes.

The next line is the type of exception that was unhandled: ObjectDisposedException. This is also very important. Always include this in your report. If anything, this is the most important piece of information.

The next part is called the Stack Trace. In 2 sentences, the stack trace is an ordered list of methods (or functions) that pin-point where the in the code the crash happened. Think of it as turn-by-turn directions to the line that caused the crash.

The stack trace lines have 2 parts, the NameSpace and the Method. The NameSpace is the series of "Strange word followed by a Period". The method is the "Strange word followed by parenthesis that might have strange words inside". In XFControls.XFPanels.XFPanelList.PanelPaint(Graphics g), the NameSpace is XFControls.XFPanels.XFPanelList and the Method is PanelPaint(Graphics g)

Some of the lines aren't important. Most of the lines are. The most important lines are usually at the top and will have NameSpaces that looks like the application that crashed (or don't look like they come from Microsoft). The best thing to do is include all of the stack trace, but it is also good to know what exactly you are telling the programmer.

Here is basically how I would read the stack trace above:
Hey, your application XDAFacebook.exe had an ObjectDisposedException exception that was thrown by the System.Drawing.Graphics.DrawImage(Image image, Int32 x, Int32 y) method, which was called by FControls.XFPanels.XFPanelList.PanelPaint(Graphics g) inside the XFControls.XFPanels.XFPanelBase.OnPaint(PaintEvent Args e) method.

If any of those lines weren't in the report, I wouldn't be able to get the full picture. So, unless you have a good understanding of the application's source, include the full report!

Developer Defined Messages

Developers try to handle as many errors as possible. In the case that you get a Message from the application signifying some kind of error has occurred, supply the message the occurred, the steps you took to get the error and your "What I expected and what I got". If the message isn't enough information, the developer needs to change his message.

Also, check for any debugging options which the developer may have included, such as a log file. These either tend to be automatically generated files in the install directory, or they exist as a viewable panel within the application. Check with the documentation or ask the developer where these log files exist [1]
Rule number #4, be smart.
I should put this higher in the list, because it really should be the first thing you need to do.

First thing you need to do is make sure you have the latest version of the software installed. Also do a quick search of the thread to make sure that the bug hasn't already been reported. If it has been reported, I personally don't mind a quick "I have the same problem, here are the steps I had to reproduce..." with a link or quote of the original error.



This guide will be updated as I come up with new observations and as people respond with questions/suggestions. Please tell me what you think of the guide and always try and be constructive when you are beta testing software!

Thank you

**updates**
[1] 12/7/2010 (Thanks meltwater!)
 
Last edited:

y0himba

Senior Member
Sep 16, 2008
451
54
In a house.
www.y0himba.net
This is one of the best guides I have seen on any forum. This holds not only true for feedback about a program or your program, but jsut about any post or feedback on an Internet forum. Thank you very much for posting this, and I hope more folks read it.
 

moolash

Senior Member
Mar 10, 2009
346
14
Hungarian

I did a Hungarian translation quickly. I am checking errors and all, I will upload a version without accents, unless someone tells me how to conver áéöő etc etc.
:D
 

MichelDiamond

Retired Recognized Developer
Jul 6, 2009
2,222
272
For this great Feedback Hint - Topic I can only give my Feedback: "EXCELLENT" !!!

Thanx for this work - I directly linked it to the CHTS FAQs

Keep up your great work!
Micha
 

joe_coolish

Retired Recognized Developer
Mar 26, 2010
755
234
American Fork
For this great Feedback Hint - Topic I can only give my Feedback: "EXCELLENT" !!!

Thanx for this work - I directly linked it to the CHTS FAQs

Keep up your great work!
Micha

Thanks! I hope that other devs can benefit from this guide :) I've seen the quality of comments rise a little in XDAFB thread since I've posted and link to this. Hopefully as more people learn what we need and look for, we can improve our software faster :)
 

meltwater

Inactive Recognized Developer
Jan 28, 2009
2,070
325
Thanks! I hope that other devs can benefit from this guide :) I've seen the quality of comments rise a little in XDAFB thread since I've posted and link to this. Hopefully as more people learn what we need and look for, we can improve our software faster :)

Nice one!

Sometimes it is easy to forget that the user does not know your software inside out like the developer does.

I would also add to: Developer Defined Messages
Check for any debugging options which the developer may have included, such as a log file.
For instance, your XDAFacebookDebug.xml file.

Also you could add to Rule1:
If the application has causing some serious problems on your device, remember the developer is the 1st person who will be able and willing to help you resolve your problem.
 

snedo

New member
Apr 18, 2010
2
0
here is Slovenian translation for XDA Facebook:
rapidshare.com/files/434748120/Slovenscina.rar

Best regards
 
Last edited:

joe_coolish

Retired Recognized Developer
Mar 26, 2010
755
234
American Fork
Nice one!

Sometimes it is easy to forget that the user does not know your software inside out like the developer does.

I would also add to: Developer Defined Messages
Check for any debugging options which the developer may have included, such as a log file.
For instance, your XDAFacebookDebug.xml file.

Also you could add to Rule1:
If the application has causing some serious problems on your device, remember the developer is the 1st person who will be able and willing to help you resolve your problem.

Thanks! I made the updates :) Great suggestions
 

jontp2

Senior Member
Feb 3, 2010
87
2
beta 4.1.1

downloaded this yesterday & gotta say I like it, like the presentation & the nice big buttons, very finger friendly.
I've attached an error log file for you, I'm running this on a TP2 with win mo 6.1 upgraded to compact framework 3.5.
The only issues I've noticed are that the messages shown in the inbox are actually my sent messages but other than that no problems.
If I may make a suggestion it would be nice if the blue banner at the top that contains the title of the page you are on could be clickable to take you back to the home page shortcuts.
Thank you very much for your work creating this app, great.
Jon
 

Attachments

  • ErrorLog.txt
    1 KB · Views: 19

ei05035

Senior Member
Jun 24, 2007
117
9
Bragança
As a developer myself I cannot stress enough the importance of the original post of this thread.

This information should be passed on to everybody at this site. I mean this is xda-DEVELOPERS. So, the formation of good testers is what also allows us to be good developers.

I have also suffered my fair share of badly constructed feedback from time to time. And most cases the users don't do it on purpose, they simply have no idea of what information they should provide, and you have to constantly tell them what and how to do it.

To summarize, please oh please, make this sticky in a visible forum. It would really mean a lot, as it would help form the next generation of users and testers :)

Kudos,

João Jacob
 

cajunflavoredbob

Senior Member
May 1, 2010
9,938
6,465
Your Basement
downloaded this yesterday & gotta say I like it, like the presentation & the nice big buttons, very finger friendly.
I've attached an error log file for you, I'm running this on a TP2 with win mo 6.1 upgraded to compact framework 3.5.
The only issues I've noticed are that the messages shown in the inbox are actually my sent messages but other than that no problems.
If I may make a suggestion it would be nice if the blue banner at the top that contains the title of the page you are on could be clickable to take you back to the home page shortcuts.
Thank you very much for your work creating this app, great.
Jon

Shouldn't you be posting this in the XDA FaceBook App thread?
 

Laurentius26

Inactive Recognized Developer
Nov 22, 2005
7,970
1,151
Super guide, thanks a lot. :)

People forget so easy how important it's to leave feedback.
Only with feedback applications/roms can be improved.

Besides that a thank you is indeed also nice and keeps you going developing as that's why you develop to see how happy people are with the work you share.

If nobody leaves feedback or a thank you what's the use to share isn't? :)
 

joe_coolish

Retired Recognized Developer
Mar 26, 2010
755
234
American Fork
Super guide, thanks a lot. :)

People forget so easy how important it's to leave feedback.
Only with feedback applications/roms can be improved.

Besides that a thank you is indeed also nice and keeps you going developing as that's why you develop to see how happy people are with the work you share.

If nobody leaves feedback or a thank you what's the use to share isn't? :)

I totally agree. I also really like your signature! That is one of the reasons I open source most of my projects. I learned how to program from a lot of open source projects, so I like to give back and hope someone learns from my work :)

Thank you for your comment!
 
Hello my friends. Thanks for this great app... Well... I've being testing in my touch pro 2. When I've tryng to open a picture from the "feeds", and error message is shown and the app was closed. I look in the file directory and found the "ErrorLog.txt", and says this:

NullReferenceException-en XFControls.XFPanels.XFPanelBase.prepSlideLeft()
en XFControls.XFPanels.XFPanelBase.OnMouseUp(MouseEventArgs e)
en XFControls.XFPanels.XFPanelList.OnMouseUp(MouseEventArgs e)
en System.Windows.Forms.Control.WnProc(WM wm, Int32 wParam, Int32 lParam)
en System.Windows.Forms.Control._InternalWnProc(WM wm, Int32 wParam, Int32 lParam)
en Microsoft.AGL.Forms.EVL.EnterMainLoop(IntPtr hwnMain)
en System.Windows.Forms.Application.Run(Form fm)
en XDAFacebook.Program.Main()

Sorry by my english... Is very poor. Saludos desde Venezuela...
 

Top Liked Posts

  • There are no posts matching your filters.
  • 53
    In the world of software development, applications pass through many phases before being released, some of which include designing, planning, coding, testing, Alpha Release, Beta Release, Release Candidate, and finally Release. This guide is intended to help the people involved in public/private beta tests that do not have experience programming, but would like to give valuable feedback to the developer.

    Disclaimer
    This guide is specific to programming for the Windows Mobile Operating System, specifically for the .net Compact Framework 3.5. However, the main concepts should translate over to other platforms and frameworks.

    In the beginning...
    First off, programming is hard. Building applications that run smoothly and are bug free require considerable amounts of time and energy. In short, software development is an emotional investment on behalf of the developer.

    Because software development is an emotional investment, developers will easily take offense to criticism. This is where rule number one of giving constructive feedback comes in:

    Rule number #1, When Giving feedback, be polite!


    During my time on XDA-Developers I've been very happy with level of professionalism demonstrated by its members, but every once in a while I'll see a comment like, "This app sux!" or "Eff Dat shiz!".

    Always remember, rude comments only distract other users, cause contention, and cause the developer to become less motivated (less emotionally involved) to produce software. If the application is not working on your device, remember the developer is the first person who will be able and willing to help you resolve your problem, so they should be the last person you want to offend. [1]

    This is where the term Troll comes from. A troll is not the ugly monster that lives under the bridge, but is someone who is like the fisherman that "trolls" the river for fish (or heated response in the case of internet trolls)

    Rule number #2, be constructive!

    What's interesting about this rule is that the phrase "be constructive" in itself is not constructive. So how do you "be constructive"? Labeling a comment as constructive is not deterministic, or in other words there is no formula to test whether or not your comment is constructive. The rules in this guide will attempt to give you some pointers to giving constructive comments, but in the end, only a mix of common sense and human reasoning can determine if a comment is constructive.


    Some examples of non-constructive comments
    • The app is broken
    • "It" crashes all the time!
    • I get an error message, plz help!
    • When will the app be finished?
    • etc
    Rule number #3, if the app crashes include details about the crash

    Let's be honest. Programmers aren't perfect. In a list of common excuses given by programmers in response to different bugs, the number one response was "Well, it works on my machine!". If you are a developer you know this is true! I catch myself using this phrase all the time! But, what can we learn from this? Well, first, the crash/bug you are having might not have ever been seen by the developer (if it had, chances are they would have fixed it!). Because of this, you must include as much relevant information about the bug as possible.

    What is considered relevant? That is the million dollar question. I will attempt to give some guide-lines on how to determine what is and what isn't relevant.

    Rule of thumb: When in doubt if info is relevant, include it.
    It is hard to include too much information (hard, not impossible), but it is very easy to provide insufficient information to the developer.

    What did you do?! Is it reproducible? What did you expect to see?
    The crash isn't your fault. But if the developer doesn't have the steps to take to reproduce your error, they can't find the bug!

    When you get a crash, first thing you need to do is try and remember as many steps as you can to reproduce the bug. Then, restart the app and follow the same steps to try and get the crash screen again.

    You need to tell the developer if the crash is Always reproducible or only sometimes reproducible. Then you need to create a list of steps to get the crash. Try and always use an ordered list when doing this. It makes it easier to read and follow.

    Finally, tell the dev what you were expecting to see and what you actually saw. Some bugs don't crash but instead produce results that aren't exactly what was expected. For example, "I clicked on the 'Read' button, it won't let me read the page!" Well, the bug in this case could be that the word "Read" is ambiguous and really means "have Read" as in "I have read the page already, so mark the page as 'Read'". This is a "What I expected and what I got" error. All the info that is required is the steps to reproduce, what you were expecting and what you got.


    What is your device/ROM/Windows version?
    Sometimes this is necessary, so if your device is not in your signature, include it! If it is in your signature, include it anyways!

    The Crash Screen
    If you are lucky enough to get a crash screen, most likely you will be able to supply enough information from the error message to the developer for them to figure out what went wrong.

    If you receive the following message (or a translation there of), you must take an additional step in order to get the real crash message:
    "An error message is available for this exception but cannot be displayed because these messages are optional and are not currently installed on this device. Please install ‘NETCFv35.Messages.EN.wm.cab’ for Windows Mobile 5.0 and above or ‘NETCFv35.Messages.EN.cab’ for other platforms. Restart the application to see the message."

    This error message means you don't have the right software installed to display the crash message. To fix this, load the appropriate cab onto your device. Message cabs are located at: C:\Program Files (x86)\Microsoft.NET\SDK\CompactFramework\v3.5\WindowsCE\Diagnostics

    If that directory does not exist, install the Power Toys for .NET Compact Framework 3.5 and check again.

    Anatomy of the Crash screen.

    Here is a crash details report from my XDAFacebook application. I will describe each part and what they mean, what's important and what the programmer is looking for:
    XDAFacebook.exe
    ObjectDisposedException
    at Microsoft.AGL.Common.MISC.HandleAr(PAL_ERROR ar)
    at System.Drawing.Graphics.DrawImage(Image image, Int32 x, Int32 y)
    at XFControls.XFPanels.XFPanelList.PanelPaint(Graphics g)
    at XFControls.XFPanels.XFPanelBase.OnPaint(PaintEvent Args e)
    at System.Windows.Forms.Control.WnProc(WM wm, Int32 wParam, Int32 lParam)
    at System.Windows.Forms.Control._InternalWnProc(WM wm, Int32 wParam, Int32 lParam)
    at Microsoft.AGL.Forms.EVL.EnterModalDialog(IntPtr hwnModal)
    at System.Windows.Forms.Form.ShowDialog()
    at XDAFacebook.SplashScreen.SplashTimer_Tick(Object sender, EventArgs e)
    at System.Windows.Forms.Timer._WnProc(WM wm, Int32 wParam, Int32 lParam)
    at System.Windows.Forms.ApplicationThreadContext._Int ernalContextMessages(WM wm, Int32 wParam, Int32 lParam)
    at Microsoft.AGL.Forms.EVL.EnterMainLoop(IntPtr hwnMain)
    at System.Windows.Forms.Application.Run(Form fm)
    at XDAFacebook.Program.Main()

    The first line: XDAFacebook.exe is the application that crashed. This is important, because if the application relies on multiple .exe files, the one that crashed needs to be known. Always include which .exe crashes.

    The next line is the type of exception that was unhandled: ObjectDisposedException. This is also very important. Always include this in your report. If anything, this is the most important piece of information.

    The next part is called the Stack Trace. In 2 sentences, the stack trace is an ordered list of methods (or functions) that pin-point where the in the code the crash happened. Think of it as turn-by-turn directions to the line that caused the crash.

    The stack trace lines have 2 parts, the NameSpace and the Method. The NameSpace is the series of "Strange word followed by a Period". The method is the "Strange word followed by parenthesis that might have strange words inside". In XFControls.XFPanels.XFPanelList.PanelPaint(Graphics g), the NameSpace is XFControls.XFPanels.XFPanelList and the Method is PanelPaint(Graphics g)

    Some of the lines aren't important. Most of the lines are. The most important lines are usually at the top and will have NameSpaces that looks like the application that crashed (or don't look like they come from Microsoft). The best thing to do is include all of the stack trace, but it is also good to know what exactly you are telling the programmer.

    Here is basically how I would read the stack trace above:
    Hey, your application XDAFacebook.exe had an ObjectDisposedException exception that was thrown by the System.Drawing.Graphics.DrawImage(Image image, Int32 x, Int32 y) method, which was called by FControls.XFPanels.XFPanelList.PanelPaint(Graphics g) inside the XFControls.XFPanels.XFPanelBase.OnPaint(PaintEvent Args e) method.

    If any of those lines weren't in the report, I wouldn't be able to get the full picture. So, unless you have a good understanding of the application's source, include the full report!

    Developer Defined Messages

    Developers try to handle as many errors as possible. In the case that you get a Message from the application signifying some kind of error has occurred, supply the message the occurred, the steps you took to get the error and your "What I expected and what I got". If the message isn't enough information, the developer needs to change his message.

    Also, check for any debugging options which the developer may have included, such as a log file. These either tend to be automatically generated files in the install directory, or they exist as a viewable panel within the application. Check with the documentation or ask the developer where these log files exist [1]
    Rule number #4, be smart.
    I should put this higher in the list, because it really should be the first thing you need to do.

    First thing you need to do is make sure you have the latest version of the software installed. Also do a quick search of the thread to make sure that the bug hasn't already been reported. If it has been reported, I personally don't mind a quick "I have the same problem, here are the steps I had to reproduce..." with a link or quote of the original error.



    This guide will be updated as I come up with new observations and as people respond with questions/suggestions. Please tell me what you think of the guide and always try and be constructive when you are beta testing software!

    Thank you

    **updates**
    [1] 12/7/2010 (Thanks meltwater!)
    2
    Wonderful, should be adapted to anything, just one thing though...

    Hi Joe,

    Excellent resource for those using Windows phones (I used to)... This should be stolen by every developer and placed as message one...just one little thing though...(and it's an opinion, so take it as such) #1 should be:

    1.) RTFM!- Also known as Read The (ahem) Fine Material, including known bugs, installation instructions and any hints in the thread messages that follow on how to make what you're doing work.

    You'd be surprised how many folks in the Android forums don't read before they flash and then expect a quick answer on how to fix their problem. If they had just read the posts and did a little research, they might have found out that there were other steps to do prior to installation that should have been done. In terms of bugs, yes, I agree the more information you can get to the Dev, the better, including various logs and diagnostic results will help the Dev figure out what went wrong and might even help others find an answer if they've seen it before...

    Just a thought...:p
    1
    Thanks for the comments. Yeah, I hope that this list can help with the beta testing process.
    1
    1
    Hola, great innitiative and the right words. Would you mind if I post a link in my sig to first post?

    Not at all! :) feel free to post where ever you would like