After years of being told no metal in microwave, it still feels too weird to follow the instructions on my new microwave to use a spoon when boiling water. There’s a sticker telling me I have to add a spoon when microwaving water but I don’t see myself ever doing that because the “no metal” is so ingrained, and I’ve seen plenty of lightning videos from people who have done it.
This picture is from the lifts at the local hospital. You press a floor number (rather than up/down) and the display responds with a letter telling you which lift to catch. This additional abstraction confuses many users, as I discovered helping people use them as I was taking a coffee break.
I see the same thing on a lot of websites. Those “cool” websites that break scrolling by moving things sideways or zoom in as I scroll down. SPA sites that break the back button. Using outlook web access on a mobile browser is painful. I keep getting the “Are you sure you want to resend?” or the login prompt when I try to go back to my message list from an email.
I’ve never been a great visual web designer, I’m definitely a function-over-form type, but I’ve always started with the principles that came to be known as progressive enhancement. Make it work in the simplest way, and add the bells and whistles on top of a strong, accessible foundation. That foundation has shifted from HTML, to HTML+CSS+JS, to TSX in my latest projects, and from desktop to mobile throughout, but it is always based on the basic principles of text and forms : easy to read, easy to follow, and works the way you expect it to.
If you’re trying hard to stand out by breaking expectations, what are you trying to hide?
Whilst I have a few thoughts I’m still processing after the whirlwind of fantastic insights I got from CodeCraftConf, I wanted to capture some of the highlights from some of the answers to my questions on Growing a Team.
Many thanks to everyone who came to the session. Lots of thoughts coming out of the conference.
When is it time to grow your team?
You never grow a team, you create a new one.
There’s always too much work, you should grow when you have capacity, so you don’t put new starts off
How do you deal with resistance from existing team members?
Communicate clearly and address concerns (e.g, time to mentor)
Involve team early
Do you have a choice who joins?
Is it more important to find a culture fit or build a diverse team?
Do candidates know what they’re signing up for?
Introvert vs extrovert (see also hiring practice)
Interviews should be structured to filter out arseholes – do they have empathy (or have they been taught to suppress it)
Every new hire should bring the level up
Don’t just hire for technical skill
Diversify your interview pool
What is your biggest worry with your current team size, or with growing your current team?
Are you doing Health Checks? Survey staff regularly
Make sure the bigger team, outside your daily work, understand the culture – it only feeds from top down
Fear of churn
Loss of culture
Try to understand
Make the culture explicit
What practices do you use to ensure sustainable growth?
Pair a lot, reflect (e.g. retro)
face-to-face regularly, even if it’s video
Values workshop – does everyone share them?
Social convenor to ensure cohesion
Slack channel dedicated to positive feedback on living the values
Office/company changes should have their own backlog with an open grooming process so priorities are explicit
In a previous job, we were building an application in AWS EC2, which meant we couldn’t sit on top of the lovely Azure Key Vault/secrets.json workflow, and instead used a secure file drop as part of the deployment. We had a couple of releases that failed because secrets that were available locally weren’t included in the release package, causing the website to fail to start. We didn’t have the nice logging provided by the .Net core configuration objects, so what we did was create configuration documentation in the form on an example.config file that contained all the keys we expected, and populated dummy values. On startup, we’d compare the list of keys in the example.config which did not contain any secrets, with the actual config, and fail the startup with a report of which keys were different so we had a very quick way of checking the config was in sync with expectations.