Ask HN: I've been promoted to Architect. What do I need to learn/do to excel?
My company had some lateral movement which, somewhat surprisingly, resulted in me being promoted to "Lead Architect". It's just a fancy title because we don't have any other designated software architects. There was, in any case, technical responsibility that needed to be redistributed, so that's what happened, and titles shifted accordingly.
In the past, I had used my training budget for software architecture certifications, which was met positively by my team lead and management.
While I _wanted_ to take on that role _eventually_, I was surprised to have it happen so early. What are the things I need to learn ASAP? What things do I need to do? What should I study/read?
218 comments
[ 6.1 ms ] story [ 165 ms ] threadPerhaps you could share with us, how you brought about being promoted on the basis that even yourself recognise you were not ready for it. Surely your certifications impressed your management even though you are yet to gain practical experience.
If you have gained certifications, then surely they would have provided with knowledge that you could apply. Is there a chance that you are being too modest? If not, then I would suggest that the courses were a waste of money.
Honestly, I was just doing my job. In the end, I think I was providing valuable feedback that lead to decisions that, over longer periods of time, proved to be valuable. So I was asked to collaborate more on technical decisions and providing design ideas.
I'm in a country that puts a lot emphasis on "formal education", so having the certifications is relatively important but I do believe they were, in part, a waste of money, due to how/what was actually taught.
ie., People who cannot get a required certification (eg., degree) are probably not very capable. AND by requiring a degree we make the profession harder to enter and therefore more lucrative.
Much of what is provided during most certification processes (high school to undergrad) isn't learnt, and that which is, isn't very useful.
They exist more as race tracks to measure athlete performance. The athelete isn't expected to remember or care about the race track, only finishing.
My experience was mixed. The foundation course was good, some advanced courses were excellent, while others were way too basic to be called "advanced" courses.
[0]: https://www.isaqb.org/certifications/?lang=en
(Edit) in case it’s edited: “Ask HN: I've been promoted to Architect. What do I need to learn/do to excel?”
But in all honesty, being able to convey your ideas and vision to a variety of people and levels is key to being an architect, whether that is PPT, documents, charts, whiteboards, or just plain old conversations.
The best architects I have worked with were able to reach and convince senior business and IT leadership as well as the IT staff. Understand the why things are done the way they are done before proposing some new change, take time to listen. Status quo isn't always ideal, but it's important to understand the motivations and reasons before proposing your company or organization embarks on a new path. I've found frequently understanding the details end up being the key to a successful shift in strategy since that's the stuff that tends to bite you at the last minute and scuttle projects.
1) learn to say no
2) learn to make simple enforcable short, medium and longterm goals (ie, everyone must be on platform x by november)
3) learn to listen
4) learn to love small incremental changes rather than big bang
why say no? because you'll be bombarded by brilliant solutions. On their own will be great, but in your environment will be tech debt. Or you'll be asked to allow team x to use a new widget, instead of the old one. But then team z will want to use a different new widget to do the same thing.
Clear goals that we widely communicated allow normal people to make design decisions autonomously. It can really remove the need for constant daily updates and information overload (for you)
Some of the best insight into a product or thing will come from a junior whos only just joined. Make sure you have regular contact with all the teams, if only to steal ideas.
Large changes almost always fail. smaller incremental changes always feel less thrilling, but when you look back over a year, they will accomplish a lot more. Plus its far easier to course correct.
There were many times where I spend considerable effort into communicating goals and the background of why they are important but with sub-par results.
If you don't mind, could you provide some examples of this ?
- Because 5 out of 6 outages the last month were related to simple regressions, we have decided to improve automated test coverage. Every service must have at least 90% unit test coverage and at least 1 integration test for every happy path before the end of the year.
- We will turn off supporting system XYZ at date ABC because of reason DEF (say, it violates GDPR and we don't want that liability). The recommended replacement is system GHI. All teams that use system XYZ must migrate off it before ABC - 1 month and provide a clear plan before ABC - 4 months.
- Market research indicates that potential customers recognize that we have a lot of features, but they perceive us to be slower and this is causing them to prefer competitor X. We want to win this customer group and therefore: 1. Every new feature from any team must be benchmarked to ensure it does not impact speed-related metrics A and B (time to first paint, for example) 2. Teams X, Y and Z should spend about 50% of time this quarter identifying and fixing performance issues.
- Example from the navy: We know based on intelligence reports that the enemy has no submarines and has recently acquired a big batch of air-to-surface missiles. Therefore, when choosing priorities for repair, anti-air system have priority over anti-submarine systems.
Important for autonomous decision making is not just communicating the priorities, but also WHY those priorities were set. In the navy example above for example, knowing why anti-air is more important can further guide personnel into choosing properly, since there might be systems officially classified "anti-air" that are not useful against air-to-surface missiles but only against helicopter or whatnot. The military calls this extra communication "commanders intent". Of course, letting people make decisions autonomously requires trust on both sides. It is worthwhile to invest in this.
All of these are requirements, not architecture. Architecture is about satisfying those requirements along with all the others in a cohesive and structured way.
My guiding quote is "Design is about constraints" from Charles Eames. Find and explore those constraints and you will be able to determine the architecture.
But as the head architect, its your job to figure out where the company is going and design goals to get them there.
A standard problem is monitoring, or more than one way to host/deploy something so good long term goals might be:
All services must be on platform p
All services must use <<CI system of choice >>
All systems must emit metrics according to spec 1.0
system z will be turned off by march 2021, migrate to new system y
These goals are clear, measurable and only have one instruction. They are not prescriptive.
These goals can be given to the team leads to figure out how to do. You then have to watch them and try and gently steer them away from making new legacy/snowflakes.
Big Bang changes have obvious benefits but the individual incremental states often don't justify the change by themselves. You have to become really good at selling the overall vision while also keeping people focused on the short term objectives. Holding the two in balance is a really tricky thing to do but, I think, represents the core value of a good architect: they are the navigators who can describe the destination but can also describe the next turn to take to get us there.
But I admit, it's a hard balance to find; you want to choose boring technology for your business, but for hiring you want to choose exciting, new technology because people generally don't want to work with boring tech when they're looking for a new job.
On that note, keep in mind that you will likely also be a project manager and responsible for hiring and / or indicating that your company needs to hire people. You have been empowered, it's up to you to push to your management to make investments in e.g. hiring, training, etc.
+1 for this. We've been struggling for a while with backfilling roles, and it's killing projects. But only one person was clamoring for more bodies and specific skilsets -- and they didn't have the budget for it. Once another PM and an Architect started on the "we need new blood" chorus we finally got some extra hires and contractors (that is, 1 hire, and 3 contractors -- but that was enough).
As an architect you're going to have to foresee that kind of stuff, and then advocate for it. "We might be able to get by without [X]" means we don't need that to accountants, so you're going to have to pick battles.
Well, it all depends on the actual stack being used. If you are on dead-horse technologies or superseded dependencies with major breaking changes (e.g. JavaEE, OpenSSL 1.0.x -> 3.x), you can't avoid big changes.
Moving fast and breaking things is a way to force changes to legacy systems, where the tech wasn't ready for it (e.g. moving from monolith to microservices)
This is difficult for me. I think part of my success until now was a strong "can do" mindset. Thankfully, I have a superior who is extremely skilled, both technically and in professional cut-the-bs skills, so I'm trying to learn.
Doing it wrong #1: Boss: Hey, can you be the architect for system X? You: Yes, sure, my schedule is full but I'll just work weekends and screw up work-life-balance.
Doing it wrong #2: Boss: Hey, can you be the architect for system X? You: No, I don't have time. Boss: Your attitude sucks. I'll replace you.
Doing it right #1: Boss: Hey, can you be the architect for system X? You: Yes, I'd love the challenge My schedule is full, can you assign some of these tasks to someone else?
Doing it right #2: Boss: Hey, can you be the architect for system X? You: Yes, I'd love the challenge. I'm fully booked until Novemver, how about I schedule this for December?
If you’re working in sprints or iterations, try to include one thing like this in every sprint. Fix the logging that generates too many log entries. Improve the error handling in a problem area of the code. Add some retry logic to something that fails occasionally. I always try to keep a backlog of small things like this, and work them in wherever I can. Over time it makes a huge difference.
THIS.
I'm a senior developer in a large org and this happens constantly. I was in one department who just about every few months was using a new JS framework to build medium sized, dynamic apps. After a year, we had four or five of these apps, all on different frameworks, and a huge technical debt because all of the framework knowledge was tied to a few individuals. It was great to build something the way you want to and test out new frameworks - but in a large org, all it did was create a ton of chaos down the road.
Now, the team has been tasked with transitioning the apps to a single framework - no simple feat when you have thousands of daily users and no one wants to give you the budget or time to re-work all of these applications.
Like OP said, stick to your guns and learn to say No. You might have to stand by your decision, but you have to really be thinking ahead and what's best for the org. Letting a dev team run wild and do what they want will kill you down the road.
Then listen & ask questions, until you've fully heard their problem and can propose a preferable alternative and what design values it better aligns with.
(If you can't answer immediately, tell them you're really interested and will look into it & get back to them in eg. two days.)
In larger environments architecture can be like steering a vast river using a small wooden paddle.
I haven't found this to be realistic: "Excel at one cloud provider services."
One idea could be that you start a document with the Arc42 [1] template.
Figure out how to communicate the essential structure of your software to everybody.
Document why certain big decisions were made. E.g. why did you pick that programming language/framework?
[0] http://beza1e1.tuxen.de/definitions_software_architecture.ht...
[1] https://arc42.org/
- Helicopter perspective
- What are the capabilities of each component
- Functional capabilities (post correct financial figures to ERP system) Versus - Technical capabilities (upload transactions as exported from db flat files over SSH/sftp to dumpsite)
- Learn to summarize and distill information about your domains, as you now are working from a helicopter perspective in a greater degree.
- Learn to understand and be inquisitive about the entire value chain of your business and solution. Understand it end to end.
- There is going to be Powerpoint, at least exeutive summaries, 1 pagers et cetera
- SIPOC is a good way to analyse left to right architectures, both for analysing solution architectures and processes.
[0] https://adr.github.io/
This is something all developers experience, of course, but it's of utmost importance when you're responsible for the architecture. For every problem your company will face, business side will come to you asking with the idea of a solution rather than with a problem. You have to extract the problem from the suggested solution, then ask yourself how you can do simpler, not to overload the architecture with adhoc solutions.
And sometimes, you have to just say "no". Business side always have tons of ideas that they will insist on being high priority, then forget about it a week later or never use the feature if you release it. A nice trick is to make them prioritize the todo list themselves, so they feel the importance of each requirement compared to the others. Just forbid they put their last idea on top of the todo list, no matter how loud they're crying for it, or it will always be the last ones that are on top. If they put it somewhere lower, they will put it to the higher position they can, then they will re-evaluate its position correctly when looking at the todo list again later.
I've proceeded with my career keeping those on mind:
- listen to what people say, you can't and won't be an expert on everything
- when you listen to them - verify and deepen your knowledge on topic, it's good to be able to connect dots
- be a practitioner - there's nothing worse than an architect that doesn't know how to code/configure server etc ;)
- attend both developer teams' demos, plannings and product teams' meetings - context is king and as an architect you have to see things both broad and narrow connecting technology with business needs
- be realistic - most businesses don't need super-high-tech-microservices-based-kubernetes-mesh-powered architectures ;)
- remember that architecture is about structure, guidelines, policies and order that aligns with business needs (so this is the starting point - understanding what business tries to achieve). Technologies really don't matter - they are just a tool
- always assume that you don't know everything - challenge your own assumptions
- be authentic and polite - people don't like super-star-asshole-know-it-all-architects (been one, don't recommend that :))
Good luck!
Architecture is a process not a product.
That's why it was called a proof-of-concept, and not an end product, I think. But if it was unusable, then it probably tried to prove the wrong concept :)
At my company, we developed a monolith that eventually reached the point where it couldn't scale anymore with the same design and was becoming more difficult to modify and update. Then over time migrated to a super-high-tech-microservices-based-kubernetes-mesh-powered architecture.
Which is to say, I agree with you. It is counter productive to start with the super-high-tech-microservices-based-kubernetes-mesh-powered architecture at the beginning. We certainly would not have came up with the specific microservices and technologies we ended up with, and never would have had a viable system to refactor at all as the microservices would have taken much longer to develop up front and iterate on than the monolith approach.
This is critically important. I try to cycle through my team's standups through the week so I know what's going on with them and what challenges they're dealing with. Often times I've found teams will raise issues during standup they won't raise at a big cross-team meeting.
Your job will be more one of herding people into doing things the right way, and it should never be one of you doing all the interesting decision making or prescribing the whole structure from the get go.
Talk with people, make sure they are invested in the overall architecture as well. And don't assume someone didn't think it through on their own until you discussed their ideas.
People who do all the architecture planning themselves, even if they aren't butting heads with anyone, can have a really negative impact on the team as a whole, because all other team members stop worrying about the topic and just let the other guy do it. I already had to deal with outcomes of this; code that has been written by "drones" is nothing you want to work with.
As a matter of process it is important to consider many different approaches together with the team, and weigh benefits and drawbacks of each approach in order to make the best decision.
Another big part of the job is to build and promote a shared technical vision among the team. This can involve establishing a technical roadmap, and principles/ethos which will be most effective if arrived at in a collaborative manner.
Think for example the choice of programing language or the DB technology used.
Architecture must strike the correct balance between vague guidelines and over-specification upfront. It should provide a framework which ensure homogeneity between components without restricting the teams/developers excessively.
On this subject, I found this presentation (by Stefan Tilkov): https://www.youtube.com/watch?v=PzEox3szeRc
Also, I'm currently reading "Designing Data-Intensive Applications", which is quite interesting and full of insight on the architecture trade-offs for data management and querying.
Likewise sometimes you choose the language (or maybe two), sometimes you choose an inter language communication protocol and allow any language. Either can be good or bad. The right answer for you is important.
Some choices above are hard to undo if you are wrong. However the hardest to undo often have significant advantages if it all works out.
(I'm currently involved in migrating quite a few large DBs, and it's a pain for everyone: SREs, support teams and the customers).
But yes, there is no "one size fits all", it depends pretty much on how your org is operating.
If you sell a product that needs a database you probably want an abstraction so you can use the customer's database and schema.
However, using a database abstraction layer in this way is counter to optimizing for simplicity, and in a way is not making a decision at all.
If you are using a database abstraction layer so thoroughly that you really can switch between different database implementations, then you are almost certainly not leveraging the strengths of any underlying database engine to begin with. So you are limiting your performance, at the same time as introducing complexity.
Complexity partitioning is fractal, from functions to objects to modules to services to deployments. The architectural focus is higher up the stack.
Avoiding complexity spillage, where distributed areas of a large application share global invariants, is a challenge, particularly when trying to scale up the development team, which will force one's hand on splitting out modules and services or service-like things (e.g. FaaS jobs).
This helps scale a team, and build a cohesive lightning fast unit.
I’ve worked with fantastic devs in the past who had no real understanding of this kind of “architecture”, and as a team the difference was clear.
> code conventions used in a project and help to enforce them with tooling (git hooks, generators, PR reviews, etc).
Finally, something where I can say "ha! that's exactly what I'm up to now". This right up my alley, and I'm hoping to make some good progress soon here.
Architecture is about the function of the system and how it interacts with its environment. That requires understanding both of those elements, functionality, and environment.
An architect might also be a dev team lead, in which case they might have such responsibilities, but the point remains that such detail oriented aspects of the development process are what the dev team lead does.
The job of a building architect isn’t to ensure the builders know how to use their tools and keep them neat, and to ensure they measure straight lines.
The role of the architect is to design the system at a high level to meet a myriad of business and other requirements such as performance security reliability interoperability extensibility etc etc
The architect is politician, diplomat, technical strategic planner, salesperson.
These are how you appear to developers as a _useful_ architect. Sure, there is a lot of other tasks that they do involving design and planning for the future - but the only way as an architect to actually impact software development is to take a hand in building it.
Every architect that I have worked with (my title has been "architect" for awhile now) that didn't spend at least 50% of their time in code was more or less a pretty picture generator - whose documents were ignored by anybody actually building the application.
A corollary is that you also need the trust of other stakeholders.
For managers I'd say you need to communicate confidently and deliver. The trick with delivering is to lower expectations early.
It depends on the organization what other stakeholders there are. That is a good separate point actually: Know your stakeholders. Make a list and ask them about their expectations.
* Persuasion
* Negotiation
* Planning
Besides hard skills these seems the most important ones. I have seen good technical architects being bad architects because:
* They can't convince anyone that the ToBe architecture is worth it so any change has to be forced. This leads to a bad environment and overall lesser results.
* They can't negotiate other teams'/business' goals with the ToBe architecture goal so, again, the ToBe architecture can be only forced to the teams.
* They can't plan what is required to go from AsIs to the ToBe architecture. They can't tell you what's the most important change to be made, what should be done first and should be done in what order. This usually leads to an NobodyWanted architecture because random changes are being done.
The lines are somewhat blurry over here. I've definitely been involved with both of those.
Is your role more a consulting one, because the teams should have a high degree of autonomy? Or are you held personally responsible for the (architectural) decisions, and therefor should have the authority to take the decision (which doesn't mean, you should not consult others).
What is/should the "border" of your personal responsibility starts, and where is it more consulting?
Do you only define (or facilitate to define) the top-level architecture, or are you responsible for a complete top-down design of the software?
Are they hoping for a detailed structured approach going even into the teams? Or "only" someone keeping an eye on the big-picture / having a long-term vision? Or all of the above and more?
So, in a way, the same steps to take as an architect in software. First find all the stakeholders involved (bosses & colleagues), gather their requirements (what do they _really_ want from you), facilitate an agreement between the stakeholders about the outcome (chances are, they too many and even conflicting things). Then you should also be closer to know, what you need to learn.
You need to turn off tool tips immediately. It makes you look like a newbie.
You should setup a hot key to open excel at any time. This allows you a "panic button" to hit whenever you are playing games or planning vacations and hear someone about to enter your cubicle.
(edit: but I do get the joke now..)
Much better is a excel table .. where all of the used technologies are listed? Seriously, why and for what would a software architect needs excel for his main work?
Of course, at some point said Architect usually have to manage technological aspects, decisions, problems, projects - and for that the best tool is again "it depends", just like in any engineering endeavor. And yes, it might include a few sleepless nights doing low-level R&D, looking over code, fiddling with components, getting to the bottom of bugs, coming up with workarounds, strategy, proposals - or evaluating them, soliciting feedback, reviewing it et cetera.
And so, it depends, I might have been.
(But seriously, I usually found, that those high level tech decision makers/influencers who are not communicating enough, who are not organizing information enough, but are too lost in some specialized tool, to be completely useless. I use Google Docs and Spreadsheets to track things, because it can be easily and kind of "safely" shared with the required folks. Whereas every other tool is too slow. JIRA? Oh, that only works on the internal network, better wait months for VPN access. Oh here's a .xlsx attached to an email, fuck the actual devs that don't live on Office, and so on.
And on top of all that an "architect" is - at least in my experience - is a thankless job. Not high-profile enough to actually have authority to effect change, but usually sufficiently high on the ladder to get flak for any and all problems.
Finally, in large orgs it's not rare that the Architect role is the last line that has at least some connection to the actual tech/development, and up from there it's all about costs, headcount, opex/capex, schedules, compliance, governance, PR, and internal/external politics/sales/optics. And this makes it neigh impossible to execute well.)
Oh wait
Two of biggest lessons learn over the time are
1. Always have a Plan B in case Plan A does not work out.
2. Always be ready to defend Plan A to make it work.
Good luck on the journey.
I recommend that you learn how to speak slowly.
This not only makes you easier to understand, but also makes it easier for people to interrupt and ask questions.
And as others have said, listen carefully to questions and suggestions and try to answer them at length.
Bonus points if you can carry this over into writing, too.