[devnexus 2024] ai proof your career with software architecture

Speaker: Kelly Morrison

For more, see the 2024 DevNexus Blog Table of Contents


HIstory

  • Fairly recent. GPT created in 2018. Number parameters increasing exponentially
  • Microsoft CoPilot released in 2021. Uses Codex; a specialized model off GPT3 for creating code. Trained on billions of lines of GitHub code and can learn from a local code base
  • Amazon released CodeWhisperer in 2022. Can generate code for 15 languages. Specialized for AWS Code Deployment

Basic Example

  • Asked ChatGPT to write a Java 17 Spring boot rest API for stats in a MongoDB with JUnit 5 tests cases for the most common cases
  • Looks impressive on first pass, but then find problems
  • Hard coded info
  • Used Lombok instead of Java 17 records
  • Code doesn’t compile

Complicated Example

  • Asked ChatGPT to write an entire enterprise app for selling over 10K crafts with a whole bunch of requirements like OpenID, Sarbanes Oxley, etc
  • Didn’t try. Instead came back with a list of things to consider in terms of requirements

What AI can/can’t do

  • Can do “Ground level” work.
  • Still need humans for large orchestratoin – ex: architects
  • Can do more self without junior devs
  • Garbage in, garbage out. Trained on public code in GitHub. Not all good/correct. Some obsolete.
  • Humans better at changing frameworks, working with CSS (does it look nice), major architectural changes, understanding impact of code when requirements change

Hallucinations

  • Doesn’t understand. Asks as mime/mimic/parrot
  • If can’t find answer, will give answer that looks like what you want even if made up. Example where made up up a kubectl option
  • Not enough training data on new languages/technologies. More hallucinations when less training data
  • Mojo created May 2023. Likely to get Python examples if ask for Mojo. However, it is a subset of Python with some extra things

Security Concerns

  • Learns from what you enter so can leak data
  • Almost impossible to remove something in a LLM. ex: passwords, intellectual propery, trade secrets
  • Some companies forbid using these models or require anonymous air gapped use. Translate something innocuous into what actually want

Debugging

  • Can human understand AI generated code well enough to debug
  • GPT and Copilot can sometimes debug code, but have to worry about security

Pushback

  • Law – ChatGPT made up cases
  • Hollywood strike – copying old plots/scripts/characters
  • Unclear if generated output can be copyrighted. For now, not copyrightable but could change.
  • Some software is too important to risk hallucinations 0 ex: plane, car (although Telsa getting there), pacemakers, spacecraft, satellites
  • Lack of context – other software at compnay, standards, reuse, why use certain technologies, securities
  • Lack of creativity – need to determine problem to solve or new approaches

What AI does well

  • Low level code gen (REST APIs, config, database access)
  • Code optimization
  • Greenfield development
  • Generateing docs or tests
  • Basically the kin of tasks you hand off to a junior developer [I disagree that some of these are things you hand off]

Career Advice

  • Focus on architecture, not code
  • Don’t just learn a langauge or framework.
  • Learn which langauges are best in different situations
  • Learn common idioms
  • Look at pricing, availability of libraries and programmers
  • Learn which architectures should be implemented in different languages
  • Learn how to create great prompts for code generation
  • Learn how to understand, follow, test, and debug AI generated code

Book recommendations

  • Building Evolutionary Architectures
  • Domain Driven Design
  • Fundamentals of Software Archicture
  • Head First Software Architecture

More skills

  • Types or architecutures – Layered, event driven, microkernel, microservices, space based, client/server, broker, peer to peer, etc
  • Determine requirements – domain experts don’t know enough about software to specify. Can be bridge between AI and domain experts

Mentoring junior developers

  • Teach how write high quality prompts.
  • Remind to ask for security, test cases, docs, design patterns, OWASP checks
  • Show to spot and deal with hallucinations
  • Help to understand and debut AI written code
  • Help learn architecture by explaining why choices made
  • Ensure code reviews are held
  • Precommit git hooks to test code
  • Use AI to help generate unit tests

ArchUnit

  • archunit.org tests architecuture.
  • Can add own architecture rules.
  • ex: never use Java Util Logging or Joda Time
  • ex: fields should be private/static/final
  • ex: no field injection
  • ex: what layers are allowed to call
  • Can include “Because” reason for each rule
  • Ensures AI doesn’t sneak in something that goes against conventions

My take

Good examples. I was worried about the omission of “where to senior devs” come from but there were examples like changing frameworks so not entirely ignored. Good examples from the ecosystem as well. Good list of skills to focus on.

[devnexus 2022] meta-modern software architecture

Speaker: Neal Ford from thoughtworks

@neal4d

Link to table of contents

———————

Were architectures come from

  • Architecture is reactive
  • Someone starts doing something, then others do
  • Once a bunch doing, named (after the fact)
  • Reflection on how doing software development at the time
  • Once in an architecture, can watch how it grows and changes

Eras

  • Victorian – 1801-1900 – science, cassifying natural world
  • Modernism – 1890-1945 – industriial revolution, explosive growth of cities, abstract art, radio.
  • Post-modernism – 1946-1990 – push back about modernism, irony, questioning everything, television, Seinfield’s ”never hug, never learn”
  • Post-post modernism or metamodernism – 1990-present – internet
  • Naming things is hard. Not just in software. Modernism is bad choice of name because what would come next

Metamodern

  • In 1989, to find out Chicago weather would need to watch Weather Channel and wait for it to cycle around or go to library. Now pull it up onlie.
  • In 1989, could read a few books and know pretty much everything about wine. Now too much info and keep generating more.
  • Holism – view various systems as whole
  • Parks and recreating is first meta-modern show
  • Breaking bad – colo driven – yellow is safe and purple is bad
  • Return to sentimentaliitiy. Can’t live on ironism alone

Software architecture

  • microservices – one of most popular pages on Martin Fowler’s website. Say what it is and more importantly, what it isn’t.
  • First law of software architecture: ”Everything in software architecture is a tradeoff”. If you haven’t encountered yet, will be in the future
  • Reuse reduces complexity but comes with high coupling
  • Metamodern software architect needs to do tradeoff analysis. Ex: things that change slowly are good for reuse such as frameworks and OS
  • service mesh and sidecar pattern – orthogonal coupling

Books

  • ”Fundamentals of Software Architecture”
  • ”Software Architecture: the Hard Parts”
  • ”Data Mesh”

Forces

  • Consistency – atoic, eventual
  • Communication – sync, asych
  • Coordination – orchestrated, choreography
  • 8 possiblities by choosing one of each. ex: one is a monolith. All 8 can exist as pattern or antipattern.
  • Named them transactional sagas. epic, fantasy fiction, fairy tale, parallel, phone tag, horror story time travel, anthology

Richard Feinman

  • Computers used to be a room full of people (usually women) calculating things
  • Feyman added specialization and paralleliation. Some people are better at some tasks than others. And recovering from problems
  • 1945 – atomic bomb blast is what shifted eras
  • reonsider why continuing to do thing. revisit when reasons change

Internet

  • Pushed us to net era
  • Volkswagon used software to cheat on emissions test. Some people knew actively working to break the law
  • Facebook keeps getting busted for doing bad thigs – data breaches, illegally tracking users, Cambridge Analytica, using two factor for marketing.
  • Last week, Facebook made up a meme that TikTok that students slapping teachers. Then it became a self fulling prophacy

Finance and ethics

  • Modernism – double enry accounting
  • Post-modern – quants
  • Metamodern humane corporation, ethics. Recognize all connected to each other
  • Don’t want to create something cool and spening rest of career on appology tour
  • Apple, Google employees pushed back

My take

Fun start to the day. I hadn’t heard of the ”saga” approach before. Googling, at least some of them see to be a real thing. (and all are from ”the hard parts” book I also increased my book reading list. The end felt rushed. Maybe because started late?

[2018 oracle code one] evolutionary architecture in agile environment

Evolutionary architecture in agile environment

Speaker: Xavier Rene-Corail

For more blog posts, see The Oracle Code One table of contents


“Conflicts”

  • Not that we don’t have a plan. We have a plan. But it can change
  • Emerging design – do have a high level design. Not chaos
  • Things change. There’s nothing that will not change. Make easy to change the things that will/might.
  • Prototype architecture. Working software over comprehensive documentation. Architects shouldn’t deliver paper docs

Software architecture is

  • “the important stuff (whatever that is)” – Ralph Johnson
  • finding internal *abiities
  • managing conflicting *abilities and determining which is most important

Agility is

  • ability to move quickly and easily – Oxford dictionary

Evolution of architectural styles

  • Monolith – not scalable, single point of failure
  • Layered – defacto standard for JEE apps
  • SOA – natively scalable, but cn turn into monolith
  • Microservices – now need orchestration
  • Severless – abstract more

Beware of

  • Dependency hell/service dependencies
  • Distributed transactions

General

  • Minimize coupling
  • Couple fro highly changing to infrequently changing
  • Ask users for feedback. Don’t overarchitect
  • Feature flags. Make safe to fail
  • Eat an elephant one bite at a time. Design that way too

Decide up front – programming languages and frameworks. These are difficult to change.

My take: Good session. My notes are “less good” because I was eating lunch during the design principles. So listening, but not blogging!