Library quiet and personal space all day are GREAT for libraries. For an office where groups of professionals are creating software? Not as great!
I found a book recently, left behind by a previous employee of my current client. It was in a drawer mixed with old corporate plastic trinkets and some paperwork dated 2015. I shredded the paperwork and thought about tossing the book. It looked unread, and ridiculous. The title "Joy, Inc." seems like a great title for a vapid fluff piece of junk. My hand held it over the waste bin and I paused. Maybe it was a pang of guilt for tossing an unread book, not sure. Sometimes books can be special.
I took it home and read it.
I learned that the author, Richard Sheridan, has found a way to joyfully create software with other professionals. They work hard and have fun at the same time. He wrote this book to share his intentionally not-secret-formula with anyone interested in being more productive and having a better life in general. A thread woven through all parts of the formula is that authentic recognition of what works sustainably is better in all ways than many peoples' ideas of what's realistic. And business as usual in many professional software development settings bakes fake in.
Read the book for all the rich context and relevant personal experiences; no good book can be authentically summarized to deliver the same depth of insight. Here, simply, is a summary of some key recipe elements that jumped out to me as I read.
- Pair program for everything
- Programmer working alone creates systems with parts only one person knows. No guilt-free vacations for you if high profile enough.
- Being the only person able or trusted at a company to make changes to a part of a system is a prison with golden bars. Still a prison. No new projects for you.
- Lone hero culture is dead end.
- Break work descriptions so stories literally fit on note-cards
- Can't be explained simply then simply is not ready to be worked on.
- Keep the stories easy to find, like pasted on a wall, not buried in a pile of electronic records that are easy to lose.
- People doing the work estimate the work
- Don't hold people accountable to estimates created by anyone else.
- Don't change estimates to fit a schedule. Fit the schedule to the estimates or fit the work to the time you have.
- Estimate with the information you have. Yes, it is always incomplete. You are guessing.
- Iterate weekly
- Don't wait too long to re-align with larger group of stakeholders. Everyone is working with incomplete information so get and share new data points as you all move forward.
- Plan with stakeholders using physical easy to see real-things
- Story estimates are folded cards. Smaller estimates are folded smaller.
- Total opportunity for work in the iteration is represented by a fixed size tray. Put folded cards into the tray until all open spots are filled. No more open spots? No more stories for that iteration!
- Prototype with kindergarten tools
- Use paper drawings and talk through clicking buttons
- Watch subject matter experts doing their job and using the prototypes. Discover the unexpected this way.
- Record actual hours worked
- Show actual hours worked, not tidy 8 hours every day. Fake hours create fake history of how long things take. This is a poor foundation for estimating future work.
- Work in same physical location at the same time
- Co-locate with all team members working on your project, not just your pair partner.
- Overhear relevant things.
- Discover that irrelevant social conversations with colleagues open doors of insight into skills and ideas that turn out to be highly relevant to current or future work.
- Eliminate fear
- Experiment and expect most experiments to fail
- Promote immediate transparent reporting of estimate slippages and bug discoveries
- Sugar-coated assessments and reports are poison to performance and trust.
- Respect people as people
- Have clear working hours. Requesting work on weekends or after hours has a cost on sustainability and quality of life.
- People don't want to work here anymore? Don't counter offer to trap them; let them chase their dreams. And welcome them back if they discover this was the place to be.
- Sustainability matters.
- Don't have meetings that don't matter
- Consider having meetings where everyone is engaged
- Yes, have a daily stand-up with everybody. Don't take too much time.
- Plan to learn new programming languages and frameworks
- If you can answer the context-less question "what language do you use to create software" with the name of one language then perhaps you are missing opportunities to use better ones for some work. Use the tools and development frameworks that make the most sense and learn on the job as you create using them.
- Be a learning organization in all ways.
- Learn by doing.
- Trust the process
- If there are special cases where you don't follow your process then this is evidence that your process sucks.
- Leadership is everywhere
- Roles exist and are fluid as makes sense with work and opportunity.
- Leadership consistently demonstrates the culture.
- Everyone feels empowered and is empowered.
If you are in the software development business for long enough, and thriving, then there is something about it that for you keeps you in it. Richard has tested, and continues to experiment, with practices that bring authentic life-sharing into the workplace. The formula he shares make the workplace fun and joyful while increasing quality, agility, and business opportunity. Sounds crazy and maybe it is. Crazy good.