Employee Feedback Surveys That Get Honest Answers
You send out an employee survey. The responses come back overwhelmingly positive. Everyone's happy. Six months later, half the team has quit. What happened? They told you what they thought you wanted to hear.
Employee feedback surveys fail for one reason: people don't feel safe being honest. They worry their manager will recognize their writing style. They fear retaliation for negative feedback. So they give you useless, sanitized responses that hide the real problems.
This guide covers building surveys that actually get honest answers - through genuine anonymity, smart question design, and creating psychological safety.
Start With Anonymity
Don't just say the survey is anonymous - prove it. No email collection, no name fields, no identifying questions. Make this clear upfront.
form.setTitle(() => 'Employee Feedback Survey');
// Clear anonymity statement upfront
form.addRow(row => {
row.addTextPanel('anonymityNotice', {
computedValue: () =>
'๐ This survey is completely anonymous. ' +
'Your responses cannot be traced back to you. ' +
'Please be honest - your feedback helps us improve.'
});
});The notice appears before any questions. It sets the tone: we want honesty, not performance. This isn't a test - it's a chance to actually be heard.
Pro tip
If you need department-level data, use broad categories and make it optional. "Engineering" with 50 people is anonymous. "DevOps Team" with 3 people is not.
Optional Demographics
Sometimes you need to identify patterns by department or tenure. Make these optional and use categories broad enough to maintain anonymity.
// Department is optional and broad categories only
form.addRow(row => {
row.addDropdown('department', {
label: 'Department (optional)',
options: [
{ id: 'prefer-not', name: 'Prefer not to say' },
{ id: 'engineering', name: 'Engineering/Tech' },
{ id: 'sales', name: 'Sales/Marketing' },
{ id: 'operations', name: 'Operations' },
{ id: 'support', name: 'Customer Support' },
{ id: 'admin', name: 'Admin/HR/Finance' }
],
defaultValue: 'prefer-not',
tooltip: 'Helps us identify department-specific issues. Use broad categories to maintain anonymity.'
});
});"Prefer not to say" as the default removes pressure. People who want to provide context can, but no one feels forced to narrow down their identity.
Overall Satisfaction
Start with the big picture. A single satisfaction rating gives you the most important metric - and sets context for detailed questions.
form.addRow(row => {
row.addRatingScale('overallSatisfaction', {
label: 'Overall, how satisfied are you working here?',
preset: 'satisfaction',
size: 'lg',
isRequired: true
});
});The satisfaction preset uses a 1-5 scale from "Very dissatisfied" to "Very satisfied." It's familiar, intuitive, and gives you comparable data over time.
eNPS: Would They Recommend?
Employee Net Promoter Score (eNPS) asks: would you recommend this company as a place to work? It's a powerful indicator of engagement.
form.addRow(row => {
row.addRatingScale('recommend', {
label: 'How likely are you to recommend this company as a place to work?',
preset: 'nps',
showSegmentColors: true,
showCategoryLabel: true,
isRequired: true
});
});The NPS preset (0-10 scale) with segment colors shows detractors (0-6) in red, passives (7-8) in yellow, and promoters (9-10) in green. The category label tells respondents where they fall.
Matrix Questions: Rating Multiple Items
Matrix questions let you gather structured feedback on multiple aspects efficiently. One grid, many insights.
form.addRow(row => {
row.addMatrixQuestion('workEnvironment', {
label: 'Rate the following aspects of your work environment:',
rows: [
{ id: 'workload', label: 'Workload is manageable' },
{ id: 'resources', label: 'I have the resources I need' },
{ id: 'communication', label: 'Communication is clear' },
{ id: 'recognition', label: 'My work is recognized' },
{ id: 'growth', label: 'I see opportunities for growth' }
],
columns: [
{ id: '1', label: 'Strongly Disagree' },
{ id: '2', label: 'Disagree' },
{ id: '3', label: 'Neutral' },
{ id: '4', label: 'Agree' },
{ id: '5', label: 'Strongly Agree' }
],
selectionMode: 'single',
striped: true
});
});Each row is a statement to rate. The columns are your scale. This format is faster than individual questions and gives you directly comparable data across categories.
Manager Feedback
Manager relationships drive engagement more than almost anything else. But employees often fear rating their direct manager. Group it in its own section with reassurance about anonymity.
const managerSection = form.addSubform('managerFeedback', {
title: 'About Your Manager'
});
managerSection.addRow(row => {
row.addMatrixQuestion('managerRating', {
label: 'Rate your direct manager on:',
rows: [
{ id: 'support', label: 'Provides support when needed' },
{ id: 'feedback', label: 'Gives useful feedback' },
{ id: 'fair', label: 'Treats team members fairly' },
{ id: 'listens', label: 'Listens to concerns' },
{ id: 'clear', label: 'Sets clear expectations' }
],
columns: [
{ id: '1', label: 'Poor' },
{ id: '2', label: 'Fair' },
{ id: '3', label: 'Good' },
{ id: '4', label: 'Very Good' },
{ id: '5', label: 'Excellent' }
],
selectionMode: 'single',
striped: true
});
});Focus on behaviors, not personality. "Gives useful feedback" is actionable. "Is a good person" is not. Managers need specific areas to improve.
See more survey templates with matrix questions.
Open-Ended Questions
Rating scales show you where problems are. Open questions tell you what the problems actually are. You need both.
form.addRow(row => {
row.addTextarea('bestThing', {
label: 'What\'s the best thing about working here?',
placeholder: 'What keeps you motivated? What do you enjoy most?',
rows: 3
});
});
form.addRow(row => {
row.addTextarea('improvements', {
label: 'What\'s one thing we could do better?',
placeholder: 'Be specific - vague feedback is hard to act on.',
rows: 3
});
});"One thing" is intentional. Asking for "all your feedback" gets overwhelming responses or nothing. Asking for one thing gets focused, actionable answers.
Conditional Follow-Up
Tailor follow-up questions based on their ratings. Someone who rated satisfaction as 1 needs a different question than someone who rated 5.
// Follow up on low ratings
form.addRow(row => {
row.addTextarea('concerns', {
label: 'You indicated some dissatisfaction. Can you tell us more?',
placeholder: 'What specific issues are affecting your experience?',
rows: 3,
isVisible: () => {
const satisfaction = form.ratingScale('overallSatisfaction')?.value();
return satisfaction !== null && satisfaction <= 2;
}
});
});
// Follow up on high ratings
form.addRow(row => {
row.addTextarea('whatWorks', {
label: 'What\'s working well that we should keep doing?',
placeholder: 'Help us understand what to maintain and expand.',
rows: 3,
isVisible: () => {
const satisfaction = form.ratingScale('overallSatisfaction')?.value();
return satisfaction !== null && satisfaction >= 4;
}
});
});Low ratings need explanation - what's wrong? High ratings need reinforcement - what should we keep doing? Middle ratings might get "what would move you from neutral to satisfied?"
Quick Pulse Questions
Not every question needs a scale. Thumbs up/down captures sentiment quickly on specific topics.
// Quick pulse check questions
form.addRow(row => {
row.addThumbRating('hasVoice', {
label: 'Do you feel your opinions are heard?',
showLabels: true,
upLabel: 'Yes',
downLabel: 'No'
});
});
form.addRow(row => {
row.addTextarea('voiceDetails', {
label: 'Can you give an example?',
placeholder: 'When did you feel heard (or not heard)?',
rows: 2,
isVisible: () => form.thumbRating('hasVoice')?.value() !== null
});
});"Do you feel heard?" is a powerful question. A simple yes/no, followed by an optional example, gives you both quantitative and qualitative data.
Mood Check
Emoji ratings work well for emotional questions. "How are you feeling about work?" is hard to answer with a number. An emoji makes it natural.
// Emoji rating for mood/stress
form.addRow(row => {
row.addEmojiRating('currentMood', {
label: 'How are you feeling about work lately?',
preset: 'mood',
size: 'lg',
showLabels: true
});
});The mood preset ranges from sad to excited. It captures the emotional temperature of your team in a way that scales can't.
Prioritization: What Matters Most
Let employees tell you where to focus. Suggestion chips make prioritization easy and give you clear direction.
form.addRow(row => {
row.addSuggestionChips('priorities', {
label: 'What should leadership focus on? (select up to 3)',
suggestions: [
{ id: 'compensation', name: 'Compensation' },
{ id: 'benefits', name: 'Benefits' },
{ id: 'flexibility', name: 'Work Flexibility' },
{ id: 'growth', name: 'Career Growth' },
{ id: 'culture', name: 'Culture' },
{ id: 'communication', name: 'Communication' },
{ id: 'tools', name: 'Better Tools' },
{ id: 'workload', name: 'Workload Balance' }
],
max: 3
});
});Limiting to 3 forces prioritization. If everything is important, nothing is. This tells you what your team actually wants leadership to focus on.
Closing Strong
End with an open field for anything not covered, and an option for follow-up if they want to discuss their feedback further.
form.addRow(row => {
row.addTextarea('otherFeedback', {
label: 'Anything else you\'d like to share?',
placeholder: 'This is your space to raise any topic not covered above.',
rows: 4
});
});
form.addRow(row => {
row.addCheckbox('willingToDiscuss', {
label: 'I\'d be open to discussing my feedback further (still anonymous - HR will post a sign-up)',
defaultValue: false
});
});The "willing to discuss" checkbox maintains anonymity while opening a door. Post a sign-up sheet separately - those who want to talk will self-identify on their own terms.
Complete Example
Here's a streamlined employee feedback survey:
export function employeeSurvey(form: FormTs) {
form.setTitle(() => 'Employee Feedback Survey');
// Anonymity notice
form.addRow(row => {
row.addTextPanel('notice', {
computedValue: () => '๐ This survey is anonymous. Be honest.'
});
});
// Overall satisfaction
form.addRow(row => {
row.addRatingScale('satisfaction', {
label: 'How satisfied are you working here?',
preset: 'satisfaction',
isRequired: true
});
});
// Key areas matrix
form.addRow(row => {
row.addMatrixQuestion('areas', {
label: 'Rate these aspects:',
rows: [
{ id: 'workload', label: 'Manageable workload' },
{ id: 'growth', label: 'Growth opportunities' },
{ id: 'recognition', label: 'Recognition' },
{ id: 'communication', label: 'Communication' }
],
columns: [
{ id: '1', label: 'Poor' },
{ id: '2', label: 'Fair' },
{ id: '3', label: 'Good' },
{ id: '4', label: 'Great' }
]
});
});
// Open feedback
form.addRow(row => {
row.addTextarea('bestThing', {
label: 'Best thing about working here?',
rows: 2
});
});
form.addRow(row => {
row.addTextarea('improve', {
label: 'One thing we could improve?',
rows: 2
});
});
form.configureSubmitButton({ label: 'Submit Feedback' });
}Making Feedback Matter
The survey is just the start. What you do with the feedback determines whether people will be honest next time.
- Share results - Show aggregate data. Be transparent about what you learned.
- Acknowledge problems - Don't spin. If workload is an issue, say so.
- Take action - Even small changes show you listened.
- Close the loop - Tell people what changed because of their feedback.
Surveys that lead to visible changes get honest responses. Surveys that disappear into a void get ignored or gamed. Your response to this survey determines the quality of the next one.
Common Questions
How do I guarantee anonymity?
Don't collect any identifying information - no email, no name, no IP logging. Use broad demographic categories (50+ people per group). Consider a third-party survey tool if employees don't trust internal systems. Most importantly, never try to identify respondents based on writing style or specific comments.
What if we have small teams?
Small teams (under 10) make true anonymity difficult. Options: combine multiple small teams into one survey group, skip department questions entirely, or switch to 1-on-1 conversations where the context is explicitly not anonymous but the relationship allows honesty.
How often should we survey employees?
Annual surveys are standard but often too infrequent to catch emerging issues. Consider quarterly pulse surveys (5-10 questions) with annual deep dives. Monthly is too often - it creates survey fatigue and you can't act on feedback that fast anyway.
Should managers see their team's responses?
Aggregate only, never individual responses. Show managers their team's average ratings compared to company averages. They need to know where to improve, but identifying individual critics destroys trust and future honesty.
What response rate should we aim for?
Above 70% is good, above 80% is excellent. Low response rates often indicate distrust or survey fatigue. If participation is low, the problem isn't the survey - it's the culture around feedback. Address that first.