jadeforrest
1) Evil staging - make an environment less reliable on purpose 2) Gauntlet programs - gradually inject classes of failure into staging and production 3) Reliability races - team controlled race to inject classes of failure into staging and production 4) Newbie gauntlets - new environments default to having lots of classes of failure as a part of the environment
Include all the work. One thing to be careful of is that the demos are inclusive of all the work required to build functional software. Prepare the team to demo all the parts of their work: the APIs, the infrastructure, the reliability work, and the testing. It’s important for you to cheerlead the work that isn’t customer facing.
There is a difference between what you can control and what you can influence. By understanding how it works, you increase you chance of influencing things.
The salary review is something that the average engineering manager can use to both understand this all better, and more importantly, to address mistakes or issues in their team's salaries.
I've been at three companies that have implemented pay equity (and one of those I was the one implementing it). I wrote up a guide to implementing pay equity here: https://www.rubick.com/implementing-pay-equity/ and it's basically as you describe -- have new and existing employees get paid the same rate, with no manager or recruiter discretion.
I do tend to focus on milestones first, because even if you're focusing on problems, using milestones to focus on what's next can sometimes be helpful. But if you can get to focusing on problems directly, that's even better.
For many organizations, there isn't the latitude to do so, so I've found this works within project-focused cultures better.
So what I'm hearing is that that wasn't clear. Since a few people said that here, I'll make some edits to clarify. If you have any suggestions as to where the confusion is, I'd love to hear it. Thank you!
This isn't a post about scrum vs kanban. It's primarily about the value of using a specific definition of milestone to encourage incremental delivery. And to highlight some of the benefits of delivering in this way.
Tesla
* We value aspirational storytelling over the "truth". [We might make it true later!]
Apple
* We think different, except when it comes to creating a non-toxic environment.
* We value making money and engagement over democracy, people's lives, or their mental health.
* We value starting things over making them successful. [We will definitely kill it in a few years, but don't worry, we'll try again later.] * Don't be evil, unless you're an executive or it will make the company a lot of money.
Another way I've talked about this (to myself) in the past is that there is something akin to the cathedral vs the bazaar approach. One is designed, intentional, centralized, and structured. The other is informal, emergent, and distributed. I think this is what you're getting at with the organic structure of natural cities?
I believe the best organizations actually have some attributes of both -- tension between design and emergent structure.
Companies usually lack the right structure to really have emergent properties without bad results (see the excellent Coda Hale article referenced in another comment for some of the math behind this). I believe it takes some design to set things up so that emergent qualities can be successful.
You shouldn't squash things that arise between silos, like new communication pathways and even some collaboration. Those are very necessary and important. But I do think you need to keep an eye on collaboration, because it's often a sign that there are structural problems that will break down without further design.
The best designs, I think, allow for emergent qualities naturally.
I guess I also agree with Hayek's hypothesis, except that I'm not sure it applies here. For example, if your problem is that the go to market organization doesn't understand what is happening within the product development organization, that is a very solvable problem -- you can solve that many different ways -- the two that come to mind are role definition and communication channels.
A lot of what I'm advocating for is design that is compatible with how human beings work together, and sensitive to their limits.
I'm super curious if I'm missing your point or if you'd suggest adding anything to the piece to clarify this point. Thank you for your thoughtful comment!
This article argues against functional organization (as in most cases organizing functionally increases your coordination needs within a company).
I don't think you need a matrix management system, and actually kind of hate matrix management. In general (there are exceptions) I AM arguing for cross-functional teams. More like D&D teams, with Fighters and Wizards and Rogues and Clerics on the same team.
The management structure is a kind of separate topic. You can have cross-functional teams with or without matrix management, and I'd argue it's way better to have it without matrix management. But this is a complex topic and a separate one.
My next post is going to be about the structures you can use between teams and organizations.
You make a really good point about informal and expertise networks. Do you agree that good org design is often about making the value creation networks overlap to whatever degreee possible with the org structure? I enjoyed your blog post!
- how to make hiring faster - create a hiring strategy - improve careers page - make posts more equitable - using a candidate packet - mining your network - effective review mtg - bundled hiring
Implementing pay equity (in an engineering organization)
One thing to be careful of is that the demos are inclusive of all the work required to build functional software. Prepare the team to demo all the parts of their work: the APIs, the infrastructure, the reliability work, and the testing. If you're in an environment where there is less trust, or the leadership doesn't understand how software should be built, you may need to use the demos to educate and give context on the team's work. It's also important for you to cheerlead the work that isn't customer facing.
And added davidkunz to the Thank you section.
- I could see what portion of the team's time is spent on tech debt issues, which gives me a sense of how well we're dealing with tech debt, the state of testing, and how good our technical decision making are.
- It also gives me an idea of how well the team is dealing with the real maintenance necessary for a production product. Are we improving response times for customers, how hard is it to make improvements.
- It helps me understand team dynamics. How collaborative is the team's work. Who is working with whom? How much support do team members give each other. How much knowledge silos do we have. How does the team treat each other? Do they cheer on this type of work? How do they feel about maintenance.
That's just a few things that come to mind. I have found these demos to be some of the most information rich activities I engage in, and I find it helps me support my teams.
But I get the sense it doesn't feel great to you. What sucks about it for you?
Demos should be inclusive of all he work it takes to build a real, functioning piece of software. That should include the reliability work, the scaling, the testing, and the refactoring necessary to do real software engineering. And it should include APIs and containerization. So I guess I'm intending this as a fairly technical demo, but talked about from a customer and business perspective.
I personally think it's important for your stakeholders to understand the necessity of this work, and this gives the team the chance to talk about it.
Thanks for bringing up the failure mode of this -- I'll consider adding that to the blog post.