A recent story about an engineer who got fired because she was “difficult” reminded me of another incident from my own distant past, when we were just building up the cloud services dev team by expanding a team who had worked primarily on local apps in the past.
At the time, we had a mixed group of new and old devs, all relatively senior, but none with any specific experience with SaaS API design. A new team member insisted that there was no way he would consent to working on a system unless its APIs exhibited idempotency. This is of course crucial, especially in cases where transmission is unreliable for various reasons, including portions of the system getting restarted unpredictably.
At the time, though, no one on the team really grokked this properly, including the team member who raised the issue — he had just attended a short seminar where idempotency was described as something important. So of course, in the eyes of the team, he was being “difficult” in this case. He couldn’t explain why idempotency was important, couldn’t even properly describe it during the meeting where the topic came up. The other senior devs all pushed back at the extra book-keeping required, and got frustrated with him as he couldn’t explain why he wanted the design to look this way. As a result, he came away from the API design meeting feeling like he’d been completely ganged up on.
I spent some time with him afterwards, got the rest of the story out of him, and as a result challenged him to go do some more proper research, and put together a short (10-15 minute) presentation about idempotent design for the team. It took a few more team discussions, but eventually we went this way where it was warranted, and we moved on with the design.
What I did not do:
- Declare by fiat that we would impose design for specific transactional APIs.
- Ignore concerns of team members — both for and against the design.
- Fire or otherwise remove the team member for being “difficult”.
I learned something personally. The team as a whole learned something. If a member of your team disagrees with you, the first thing you should do is look at yourself and ask if you’re doing the right thing.