DEV Community

Discussion on: What should I know to be a software architect?

Collapse
 
jamesmh profile image
James Hickey

Software architects usually interact with the clients and stakeholders of a project. They - ideally - will need to be involved in figuring out exactly what kinds of requirements the client is looking for, being able to make sure the requirements are business requirements and not just "make this page have a floating top menu bar."

Total aside: Yes, I've been on a project where we literally spent hours of meetings with CEOs of two large insurance companies just to decide whether to use a floating top menu on the web site 😜. It happens...

Anyways, the architect needs to make sure that the technical direction of the project is viable/feasible give the business needs.

So there are two primary parts:

  • You need to know tech really well (system design and knowing what problems specific tech solves)
  • You need to be able to communicate well with non-technical people and convert business needs into software systems/designs that will allow the business to achieve those goals and yet allow flexibility of the system to change over time.

Knowing multiple programming languages, paradigms, etc. as mentioned in the "question" of this post are helpful because every language and paradigm solve specific and different kinds of problems.

If you have a business, for example, who needs a system that will be developed and maintained by hundreds of developers, then you need to know that there are specific patterns for building these kinds of systems (DDD, Microservices, etc.)

Imagine the need for an e-commerce site which needs to keep the data of all user interaction with the site (via products ordered, products added to cart, products removed for cart, etc.) so they can do analytics in the future (I.e. predictive analysis, etc.). Knowing that Event Sourcing can solve that problem would be applicable here.

So, a big part of being a good architect means your knowledge is broad enough that you at the very least know what technologies are available to solve which problems. And you can figure out what business problems map to which technological problems and solutions.

Collapse
 
stereoplegic profile image
Mike Bybee • Edited

Much of being a software architect (and especially CTO) is the ability to slap nontechnical stakeholders (up to and including your own CEO) back to reality, in a way they they respect you for. I can give an example from my time with a startup whose CEO had ADHD (and ultimately was a cheapskate and a BS artist, which is why I'm not around to build the product), and lost a major client by flying off the rails with ideas unrelated to what we were doing.

Basically, we were trying to stir up interest from potential corporate customers in running product pilots. He got an exec from a major big box electronics retailer (yes, that one) on a pitch call by himself, after I had already told him he should get me involved to keep the discussion technologically grounded in reality (rather than the all-too-typical sales routine of making promises on which we couldn't deliver without significant additional work and eaten costs). His pitch went swimmingly, but then the exec asked him what our 5 year plan was re: market saturation, expanding into new verticals, etc. This is where he went off the aforementioned rails, throwing out ideas which had absolutely nothing to do with our current core product and no conceivable (or attractive) way to integrate them: VR, facial recognition, and other buzzwords.

When he told me, I reiterated that this was why I should have been involved. The answer was easy: Since we would already need to integrate with the APIs of customers' existing systems from other vendors, we could study their strengths and weaknesses while doing so and eventually offer competing products more tightly integrated with the core product.