Live data from Hacker News

Behaviours to avoid in a software architecture role

danielwatts.info

161–170 of 174 posts

Re: Behaviours to avoid in a software architecture role

#161
post #160
post #156

Earlier quoted context omitted.

>I acknowledge that Google is able to hire incredible people. They also got a lucky break in hiring Jeff Dean early. However it is my considered belief that when you call Google an exception, you're reversing cause and effect. When people who come up with the architecture have to write code, work with their system, and see from experience what is wrong with it, they produce better architectures. Totally agree with th…

In other words you're saying that "software architect" exists as a role in these organizations because bad organizational structures create problems that it is a band-aid for. And I'm saying that the band-aid doesn't work that well, and you do better if you fix the organizational structure to not need it. And furthermore, as a developer, those organizations are no fun to be in and you can't pay me enough to want to d…

Good point, architect is indeed compensating function that comes to cover for many deficiencies in organization. Those deficiencies are:

. Developers that are mature but lack proficiency because they don't care about software development

. Inexperienced developers that lack, well, experience to make proper designs

. Absence of domain specific knowledge when company tries to shift it's technological gears or switch to new domain/market all together

. Problems in communication and planning between dozens of teams/services that build together 1 product that must work in unison perfectly, yet it's hard for each team to know architecture/plans of all of the other teams and properly consider it during development

. Absence of ability to see "the big picture" by individual teams and take it properly into consideration

. Just a general jack of all trades that will compensate for bad product/project/program management, will establish proper processes, etc.

As part of this you occasionally can revamp organizational structure and leave company in much better shape, but it requires a lot of work that you, as architect have no authority to do :)

> And furthermore, as a developer, those organizations are no fun to be in and you can't pay me enough to want to deal with them

One of my last jobs was in company that I literally sweared to never work for. They gave me a shiny title, 50% raise of already top salary in industry that I had, yet what really sealed the deal was manager who wanted to try to do something new. Even though it was at times horror show, at the end of the day it was probably most fulfilling position that I had due to a sheer volume of things that I managed to change. And we also delivered totally new product, first in industry beating all the competition to market, including companies that were supposed to be market leaders in this area.

>Which adds to the problem. When good developers choose not to be in your company because your company is a disaster for developers, you don't get good developers.

The issue is that really good developers are rare. Developers that you can delegate to them and sleep well at night are a rare commodity on the market. I been working in dev for 25 years, both in startups and in established companies and I maybe know only dozen of people like this. Unfortunately, most of the developers on the market are in it only for money and don't really care about what they are doing.

Also, as anecdote, at this ^ job place that I described, in order to work around bad reputation of the company I suggested to create daughter company with a different name that will be operated independently in a different location in order to try to get better developers. We were a few steps away from closing on office lease before management bailed out because they were afraid that it will upset employees of the company

Re: Behaviours to avoid in a software architecture role

#162
post #161
post #160

Earlier quoted context omitted.

In other words you're saying that "software architect" exists as a role in these organizations because bad organizational structures create problems that it is a band-aid for. And I'm saying that the band-aid doesn't work that well, and you do better if you fix the organizational structure to not need it. And furthermore, as a developer, those organizations are no fun to be in and you can't pay me enough to want to d…

Good point, architect is indeed compensating function that comes to cover for many deficiencies in organization. Those deficiencies are: . Developers that are mature but lack proficiency because they don't care about software development . Inexperienced developers that lack, well, experience to make proper designs . Absence of domain specific knowledge when company tries to shift it's technological gears or switch to…

To the deficiencies that you list, I have to say that your organizational structure can create better developers, or make them worse. Delegating all responsibility for the bigger picture to architects and hiding developers from those issues will make them worse. On the reverse, I admit that not every developer can learn to do architecture well. But when you enable developers to take those responsibilities, the ones who are capable of it will step up.

My rule of thumb for developers goes like this. I mentally divide developers into junior, mid-level and senior. This has nothing to do with their titles. The breakdown is that a junior developer is still learning basic programming consistency and good habits. They generally struggle on programs that go over a couple of thousand lines. A mid-level developer has internalized consistency but is unable to remain aware of the big picture while focusing on details. They tend to top out and struggle at 10k-20k line projects. A senior developer is aware of the big picture while dealing with details, and remembers details while dealing with the big picture. They tend to top out around 200k line projects. And a principal software engineer adds an awareness of subtleties about how the big picture is likely to evolve, and how to guide that in a long-term positive way. These people can manage architectures in the millions of lines.

On this scale, I rate myself senior. To move to the next level, I'd need to spend more time at large companies with very large codebases. But dealing with the associated politics is not my preference so I'm happy where I am.

The issue is that really good developers are rare. Developers that you can delegate to them and sleep well at night are a rare commodity on the market. I been working in dev for 25 years, both in startups and in established companies and I maybe know only dozen of people like this.

Judging by what I saw of environments with software architects as a role, I guess I shouldn't be surprised at this.

However I know a heck of a lot more than a dozen programmers that I consider good like that. OK, throw out top-notch organizations like Google, and just go for relatively small companies that I've worked at. Let's narrow it farther and just do places that I've worked in the last 10 years. I still have no problem getting past a dozen.

Why? Because I choose to work at organizations where software architecture is owned by developers. With other developers who have made the same choice.

(Incidentally, 3 of those programmers were co-founders at ZipRecruiter. Who hired a lot of mutual acquaintances on my list, then grew to be a billion dollar company. Somehow I don't think that this is coincidence.)

Re: Behaviours to avoid in a software architecture role

#163
post #155
post #152

Earlier quoted context omitted.

To be fair, xml-rpc truly is terrible. To start with, XML is extremely verbose and you add a lot of network overhead for that, plus a lot of parsing overhead, which makes rpcs significantly more expensive than they should be. Use https://capnproto.org/ instead. (Based on protobuff, which is an open sourced version of what Google uses internally.) As far as I'm concerned, the only valid reason to use xml-rpc is becaus…

It happened 13 years ago and it was exactly same but with different xml syntax :) It was way before microservices, etc. purely point to point.

It was way before microservices, etc.

It was not way before microservices at Google. But it was before there was much general knowledge about them.

Sadly the internal lessons learned by Google have not seeped into the outside world. Here are examples.

1. What I just said about how to make requests traceable through the whole system without excess load.

2. Every service should keep statistics and respond at a standard URL. Build a monitoring system which has scrapes of that operational data as a major input.

3. Your alerting system should supports rules like, "Don't fire alert X if alert Y is already firing." That is, if you're failing to save data, don't bother waking up the SRE for every service that is failing because you have a backend data problem. Send them an email for the morning, but don't page people who can't do anything useful anyways.

4. Every service stood up in multiple data centers with transparent failover. At Google the rule was n+2/n+1. Meaning that your service had to globally be in at least 2 more data centers than it needed for normal load, and in every region it had to be in at least one extra data center. With the result that if any data center goes out, no service should be interrupted, and if any 2 data centers go out the only externally visible consequence should be that requests might get slow.

Now compare that to what people usually do with Docker and Kubernetes. I just have to shake my head. They're buzzword compliant but are failing to do any of what they need to do make a distributed system operationally tractable. And then people wonder why their "scalable system" regularly falls over and nobody can fix it.

Re: Behaviours to avoid in a software architecture role

#164
post #162
post #161

Earlier quoted context omitted.

Good point, architect is indeed compensating function that comes to cover for many deficiencies in organization. Those deficiencies are: . Developers that are mature but lack proficiency because they don't care about software development . Inexperienced developers that lack, well, experience to make proper designs . Absence of domain specific knowledge when company tries to shift it's technological gears or switch to…

To the deficiencies that you list, I have to say that your organizational structure can create better developers, or make them worse. Delegating all responsibility for the bigger picture to architects and hiding developers from those issues will make them worse. On the reverse, I admit that not every developer can learn to do architecture well. But when you enable developers to take those responsibilities, the ones w…

I most definitely enable developers to take responsibilities. I don't want to do more then what I need to do. I also prefer to help developers grow and take more responsibility, as it makes my life easier.

BTW, principal software engineer in many places == architect. Titles are very country dependent, company dependent. When startup where I worked was bought by US company I became principal. When I was acquired by German, I was retitled... don't even remember to what.

>Judging by what I saw of environments with software architects as a role, I guess I shouldn't be surprised at this.

I wasn't always working in companies that had this title. Yet, this still remains true. Also we may have different standards and operate in different environment on different types of products :)

Re: Behaviours to avoid in a software architecture role

#165
post #99

Earlier quoted context omitted.

I'm not familiar with Amazon, but the equivalent level at FB (according to levels.fyi) represents just 1% of engineering. So this isn't only "experience, seniority and progression", it represents something really unique. It's hard to look at a list like this and say "oh I know what to do now", but it is useful as a rubric; is this person meeting most of the criteria? Just a few?

Principal at Amazon is the first level above senior software engineer, so closer to staff than principal at Google/Facebook. It isn't a particularly uncommon level to reach at Facebook or Google.

Principals at Amazon are 1.8% of the SDE population, so no, the comparison to "Staff" engineer is unfounded.

Re: Behaviours to avoid in a software architecture role

#166

Earlier quoted context omitted.

Mathematics does calculations, not decisions.

The post was sarcasm that flew over your head. You can’t even get a PhD in software architecture because the entire field is a sham title created by industry. There is no theory or science behind “software architecture” Either way you are wrong about math. All decisions can be mathematically modeled. It’s called a conditional expression, and you use it to model/calculate decisions when you program.

Different conditional expressions make different choice in the same situation, then you need to choose what conditional expression should be in the program.

Re: Behaviours to avoid in a software architecture role

#167

Earlier quoted context omitted.

UI can only show stuff in different place, with different colors and fonts, but it won't solve the problem. Explaining architectural purpose of a tool is an architectural job, neither UI designer nor salesman can do it, especially salesman.

There’s a concept in CS called an abstraction layer and the UI can literally change the thing underneath. I can create a UI with one button that when you press the button it triggers 50 actions to happen. It is not just about moving fonts and colors. This the exact same thing that a programming language does. A programming language abstracts away assembly language by having one programming expression execute several…

Then architect should tell the purpose of the tool to the documentation writer, otherwise the documentation will read "press Ok button to install %toolname%" that tells nothing how to decide what the tool is and does and whether the user needs this tool. That's the problem at hand.

Re: Behaviours to avoid in a software architecture role

#168

Earlier quoted context omitted.

There’s a concept in CS called an abstraction layer and the UI can literally change the thing underneath. I can create a UI with one button that when you press the button it triggers 50 actions to happen. It is not just about moving fonts and colors. This the exact same thing that a programming language does. A programming language abstracts away assembly language by having one programming expression execute several…

Then architect should tell the purpose of the tool to the documentation writer, otherwise the documentation will read "press Ok button to install %toolname%" that tells nothing how to decide what the tool is and does and whether the user needs this tool. That's the problem at hand.

This isn't specifically the job of the architect. Any idiot can explain how the tool they built works. So the software engineer or the product manager can do this as well. Explaining how something works is not a magical skill reserved for software architects.

What is a skill reserved for architects? If you find yourself spending 100% of your time creating a powerpoint to explain things in a way that makes you sound smart and takes all the credit away from engineers then what you did there is a skill exclusive to architects.

Re: Behaviours to avoid in a software architecture role

#169

Earlier quoted context omitted.

The post was sarcasm that flew over your head. You can’t even get a PhD in software architecture because the entire field is a sham title created by industry. There is no theory or science behind “software architecture” Either way you are wrong about math. All decisions can be mathematically modeled. It’s called a conditional expression, and you use it to model/calculate decisions when you program.

Different conditional expressions make different choice in the same situation, then you need to choose what conditional expression should be in the program.

Different numbers produce different results in the same arithmetic expression.

Here's the concept of conditional expressions explained via a mathematical text: https://math.libretexts.org/Bookshelves/Mathematical_Logic_a....

Re: Behaviours to avoid in a software architecture role

#170

Earlier quoted context omitted.

Then architect should tell the purpose of the tool to the documentation writer, otherwise the documentation will read "press Ok button to install %toolname%" that tells nothing how to decide what the tool is and does and whether the user needs this tool. That's the problem at hand.

This isn't specifically the job of the architect. Any idiot can explain how the tool they built works. So the software engineer or the product manager can do this as well. Explaining how something works is not a magical skill reserved for software architects. What is a skill reserved for architects? If you find yourself spending 100% of your time creating a powerpoint to explain things in a way that makes you sound s…

The architect is the only idiot, who knows the tool as a whole and, more importantly, its role in the bigger world. Other idiots know only how bits are fiddled in a small corner of the tool on which they worked during their probation, they don't know the big picture, at all. In any case documentation in big companies today is outsourced to people with zero programming experience, and they obviously can generate only absolutely vapid text with traces of fuzzy associative connections with the topic.
Post reply on HN