When I first became an architect at NetApp, I thought the job was to draw a picture, get the picture approved and then the software would magically be written.
The mental model I had was that there was this massive “power-point to product” compiler and all I had to do was draw the power-point.
To my surprise, it was a little bit more complicated.
People write software, and people are not computers. People have emotions, aspirations, interests, career goals, dislikes, strengths and weaknesses. And those people write software.
How does this influence software system design?
In the first phase, you need to figure out what the right system is. Correctness or appropriateness of a system is independent of human beings.
But then to get it implemented, you need to understand your team.
There will be skills your team has, and there are skills your team needs to acquire and there are skills your team lacks and can’t learn and you need to go find in the marketplace.
And then your job, as a systems architect, is to figure out how to build something with the people you have that adds enough value so you can stay alive.
And sometimes it means you have to wait to hire the people you need.
In many ways, this process feels like being an author of a screenplay who tailors the screenplay to the actors you hired.
One of my projects at Zynga could not start until I hired someone who understood filesystems. And so I lived with data corruption and inconsistency because there was no one who could fix the problem. And when that person was hired, I had to wait for them to ramp up at Zynga. And when they finally ramped out, only then could I actually get them to work on the problem.
But finding the right person to solve a problem is the easy part of the job. Motivating them to solve the problem is the hard thing.
The really hard part is to motivate people to write the software. Remember people have lots of reasons why they do things. And people’s best work is done when they are fully engaged in a problem, when they show up wholly – mind and heart and body.
You don’t want extrinsic motivation, because you don’t get people’s best work.
And that means a bunch of things.
The simplest and most obvious is that people have to feel safe to be themselves. If people don’t feel safe, then they will not be there. They have to feel supported. They have to feel free to be their authentic self.
Screaming at people, dismissing people, being cruel, demonstrating how much smarter than them you are, trashing their work, is how you get something other than their best work. And sadly in my past lives, I had to have a boss explain this very simple thing to me. And I’ve had to be reminded of this on more occasions than I like.
The second is that they have to feel that what they want will happen. And what they want is not what you think it is.
A large part of the job as an architect is to spend time 1×1 with everyone and making sure that they are wholly engaged. And understand what they need. And everyone is different.
For example, a co-worker of mine was trying to re-architect a system, and he was running into flak from his team. And I asked him: Did you talk to everyone to see what they wanted from this effort? And he said, no. And I said: How can you convince people of something if you don’t know what they want?
So he scheduled a bunch of 1×1’s, found out what everyone wanted, and all of a sudden the flak evaporated. It didn’t evaporate because he listened to people, the flak evaporated because he adjusted his plan to meet their wants and needs.
Sometimes I get asked: Why do you spend so much time talking to people? And my answer is: People write software and I want people to be fully invested in a solution because that’s how they do their best work.
Do I always succeed? No. But it’s my North Star.