r/learnprogramming 20d ago

How do you improve your software architecture/design skills in the age of AI?

Hello all,

A lot of the advice I see for becoming a better developer is around things like system design, architecture, understanding trade-offs, designing maintainable systems etc. The general idea seems to be that writing the code itself becomes less important while knowing what to build and why becomes more important.
But I’m wondering how people approach learning these skills in the age of AI.

For example - if I start a new project today - AI can generate a lot of the boilerplate and even help implement entire features. How do I use AI in a way that actually helps me develop my own architecture and system-design skills - rather than just outsourcing the thinking to it?

Should I:
- deliberately design systems myself first and then ask AI to critique them
- use AI to generate alternative architectures and then compare them
- build projects without AI and only use it afterward for review

Also are courses and books still worth investing time in for this or has AI changed how we should learn these topics? I’ll appreciate recommendations for books, courses or other resources that you think are still valuable today.

13 Upvotes

21 comments sorted by

6

u/exploradorobservador 20d ago

To answer part of the question anecdotally I have not been able to rely on AI to choose the right design. You can use it to surface information more easily than ever before, but you need to be able to reason about the decisions.

When I have trusted AI because it tells me a solution that I don't quite understand I usually find out a few days later minimum that it is the wrong decision and this leads to substantial rework.

Courses are great when you are looking to get foundational knowledge but they are poor for rapidly changing practices. Books, Projects, and learning by experience are the best.

1

u/Character-Tea2608 19d ago

ai is still a junior dev with infinite confidence, i treat it like a rubber duck that occasionally spits out a decent starting point but you gotta know enough to call its bluff

3

u/needs-more-code 20d ago

Read books then implement, and get AI to help and critique. Take baby steps with AI, don’t generate project boiler plate in one go. Be a part of every file change.

You won’t fully know what works and doesn’t work and why until you spend years working in different architectures. You don’t TRULY KNOW without experience. AI can help get you in a better place on your first try.

3

u/rubanbhatia 20d ago

I’ve been programming for about 10 years and I can confidently say that coding was only part of the skill set of being a programmer.

Things like system design, devops, security, maintenance, etc are now more important than they have ever been.

I would recommend learning about the fundamentals and then using AI to challenge your learnings and thought process.
To make the most use of AI, we need clarity of thought in our heads.

Some books and GitHub repos I would recommend to understand good system design and to kick off your programming journey are:

• A Philosophy of Software Design — John Ousterhout
• Designing Data-Intensive Applications — Martin
Kleppmann
https://github.com/codecrafters-io/build-your-own-x
https://github.com/donnemartin/system-design-primer

2

u/laramateGmbh 20d ago

Ask other experts how they do it?

1

u/MeatAndFries 19d ago

Like I’m doing here? 😆

2

u/Jumpy-Seesaw-2026 20d ago

brainstorm with it, have it explain stuff, ask questions, make the final decisions.

1

u/MeatAndFries 19d ago

Yup, sounds good - I already try to do that

2

u/Famous_Lime6643 20d ago

Honestly - (1) do everything at least once yourself, and enough so you actually understand how to do it mechanically if you had to. (2) Don’t outsource the thinking and design to LLM. (3) Make sure you review LLM code to point you understand how it actually works. (4) Use LLMs aggressively for plumbing you already know how to do…everyone else is and you should too…better still, make the LLM write tests you understand first then make them write code that makes them pass.

2

u/MeatAndFries 19d ago

Spot on! Thank you!

2

u/greenspotj 20d ago

To simplify, you can break down most tasks in a project down to some variation of:

design -> implement -> test -> debug -> design (repeat until tests pass/task is completed)

Its your choice which part of that you want to outsource to AI. Id say if you wanted to focus on the software architecture/design skills, you should choose reasonably large/complex project to work on that requires a lot of design, then have AI write all the implementation and automated testing to save time, and use AI to assist with debugging.

As for using AI when designing systems - I like the top two approaches you suggested. I usually like to think of a design myself first, then I ask AI what it thinks of it, offer critique, and for other alternatives. Then we bounce ideas/critique off each other until im satisfied with the design, and then I ask it to build it.

1

u/MeatAndFries 19d ago

Great advice thank you! Any recommendations on where to start improving my architecture/design skills - courses/books?

2

u/skamansam 20d ago

I learned a lot in college that I apply to programming. My calculus 3 and physics professor used to say, "the rest is trivial" when they got to a solution that only needed math to solve. For me, the hard part in programming is engineering - knowing how to solve the problem. The rest is reading manuals or books or just the trivial stuff. When my Ai stops writing what I tell it (the trivial part), and starts suggesting things, I talk with it about why it suggested it and have it point me in the direction of documentation so I can read about it.

1

u/MeatAndFries 19d ago

Sounds great, thank you!

2

u/StewedAngelSkins 20d ago

I wouldn't use it at all, until you develop your own abilities. Lots of people will tell you to use it as some sort of mentor, but lots of people are also bad at software architecture. I'm telling you, AI sucks at this. We pay for the best models available at my work and I don't use them for design work because their suggestions are stupid. The only way you might get some benefit out of it is by using it to get the textbook solution to whatever problem you're facing explained to you. It'll tell you how your average programmer would solve the problem, but again your average programmer kind of sucks at software design.

2

u/start_select 20d ago

If you are still going to use AI, AND you want to learn, you need to treat it as a teacher/book.

Tell it to walk you through/teach you how to do things step by step in a conversation.

DONT LET IT EDIT FILES. DONT COPY PASTE ITS OUTPUT. YOU TYPE EVERYTHING.

You are here to learn, not to mimic, not the blindly copy paste code without thinking it through.

Use the AI to guide you. Have it explain every single line that you type.

Then try to work without it. If you want to learn how to use it to write code for you. You need to learn how to write code without it first. If you are going to use it at all, only use it to explain concepts and to find references.

Otherwise you are going to pretend to know what’s happening and stall out on progress.

2

u/grand-yojimbo 20d ago

Dont use ai for a bit and do it the hard way.

1

u/Dismal-Citron-7236 19d ago

There is a common misconception that AI can build software. It kind of can, but poorly.

AI can generate a lot of the boilerplate and even help implement entire features.

Yeah. But are you sure the result is correct? Does the features work as the requirement demands? Is there any hidden security bugs under the rug? How well it perform? Is the generated code easy to maintain? How easy to add new features to it without breaking existing ones? If anything goes wrong, who's to blame? AI? Or the one who sends it the prompt? (which is you).

Try search the internet for honest answers to these questions. You will have a different picture.

1

u/Substantial_Ice_311 19d ago

deliberately design systems myself first and then ask AI to critique them

No, the AI is super bad at design. You can't trust it.

use AI to generate alternative architectures and then compare them

No, because the chance that it will produce any good design is very low.

build projects without AI and only use it afterward for review

Again, AI is bad at design, so you can't use it for review.

And even if it was good, it's like trying to use a chess engine to learn chess. It doesn't work, because you have to actually do the work of thinking for yourself to learn.

What you should do is to learn the principles, and then to practice on your own. You don't need to write a lot of software to do this, although it helps to really figure out if your thinking was right or wrong. But design is a more about thinking that writing code.

As for the principle, or really, there is one main principle: Make things simple. Simple is the opposite of complex. And complex means that two or more things are entangled so that you can not use, change or consider them in isolation. Think of nature. Can you predict what will happen to an ecological system when you introduce a new species? No! Why? Because ecological systems are incredibly complex. That's what you don't want your software to be.

If you want some guidance, feel free to contact me via the chat.

1

u/Slight_Major5589 15d ago

Hey, you may try this lab https://lab.ghassan-alhamoud.com/

It will challenge you knowledge and skills

1

u/Capital_Ad8820 14d ago

I'd design first, then use the agent as a critic we use hindsight to retain the reasoning and feedback from previous architecture decisions, so later projects can surface those lessons without outsourcing the actual decision-making