25th - 28th April 2023, Bangalore
- Venkat Subramaniam
- Michael Carducci
- Mark Richards
- Neal Ford
- Duncan Ng
- Ganesh Lakshminarayanan
- Gunasundari Sridhar
- Hyther Nizam
- Lakshmi Prasad Koneti
- Rajeev Purohit
- Prashanth Subrahmanyam
- Rick Maharaj
- Daniel Oh
- Emily Jiang
- Josh Long
- Mary Grygleski
- Rohit Bhardwaj
- Asir Selvasingh
- Kenneth Kousen
- Decision Dials - Venkat Subramaniam π
- From Telco to Tech-Co: Revolutionising IT Infrastructure for Start-ups - Ganesh Lakshminarayanan
- Staying Relevant in an Ever-changing Tech Landscape - Lakshmi Prasad Koneti
- Programming with ServiceLoader API in Java - Venkat Subramaniam π
- Event Messaging and Streaming with Apache Pulsar - Mary Grygleski π
- The Amazing Features of Modern Java - Venkat Subramaniam π
- Improving the Quality of JavaScript Code - Venkat Subramaniam π
- Use const as much as possible
- Use let where const is not possible
- Quit using var
- "use strict"
- Code quality tools
- ESLint - Static code analysis tool - eslint src
- Plato - Cyclomatic Complexity - plato -r -d reports src
- Live Coding: Cloud-native Application Development with MicroProfile & Open Liberty - Emily Jiang
-
Sufficiently Advanced Technology, Software, & Sorcery - Michael Carducci π
-
Democratizing Access to GPUs for Faster ML/AI Innovation with Generative AI - Duncan Ng
-
Journey to 500M - An Engineerβs view - Rajeev Purohit
-
Future with Large Language Models - Prashanth Subrahmanyam
-
15 Best Practices for Designing Enterprise RESTful APIs in the Cloud - Rohit Bhardwaj
- oData
- Schema.org
- JSON-LD
- URL Size - 3000 char
- Date/Time - ISO - 8601 Standard - https://www.w3.org/TR/NOTE-datetime
- Bounded Context
- Output validation is more important then input validation
- API Security
- Entity Tags (ETag)
- OWASP API Security
-
How to Approach Refactoring - Venkat Subramaniam π
- You can't be agile if your code sucks.
- Code is how we tell out collegues how we feel about them.
- Coding is an act of Empthy (The ability to understand another person's thoughts and feelings in a situation from their point of view, rather than your own).
- Sometime you have to slow down in order to gain speed.
- Simplicity
- Clarity
- Brevity (The state of being short or quick)
- Humanity
- SLAP - Single level of abstraction principle (Convey the what and delegate the how)
- Code is like people on a crowded train
- Comment why and not what
- Don't comment bad code instead refactor it
- Commit frequently so you can reduce the cost of undo to near zero
- Avoid clever code - Keep it simple
- Make it small and cohesive
- Discuss before doing any refactoring
- Never do big bang refactoring
- Never refactor the code because you didn't like it (because you didn't write it π)
- Only refactor if test cases are avaiable (manual or automated) - Test cases do validation
-
Event-driven Autoscaling for Serverless Java - Daniel Oh
- KEDA (Kubernetes Event Driven Autoscalling)
- Quarkus
- Openshift
- kafka
- Knative
- Prometheus
-
Bootiful Spring Boot 3 - Josh Long π
- Java 17
- Spring framework 6 & Jakarta EE 9
- Observibility
- GraalVM Native image support
- New HTTP Client using WebClient under the hood
- ProblemDetail usage
-
Transforming Data using the Functional API - Venkat Subramaniam π
- sum()
- min()
- max()
- count()
- toMap()
- toList()
- toSet()
- Joining()
- Partionining()
- Grouping()
- Teeing()
-
Designing Applications with Functional Programming Constructs - Venkat Subramaniam π
- Functional Style == Functional Composition (It is an approach where the result of one function is passed on to the next function, which is passed to another until the final function is executed for the final result. Function compositions can be composed of any number of functions)
- Functional Programming == Functional Composition + Lazy Evaluation.
- Polymorphism is to Object Oriented Programming as Lazy Evaluation is to Functional Programming.
- Functional Programming relies on Lazy Evaluation for efficiency.
- Elm uses 99.9% haskell syntaz plus a tinch of F# syntax compiles down to Javascript.
-
How to Think Like an Architect - Mark Richards π
- Read these books
- Fundamental of Software Architecture
- Software Archiecture - The Hard Part
- The first law of software archiecture - Everything in software architecture is a tradeoff
- Tecnical Depth vs Technical Breadth
- Stuff you know - Technical Depth
- Stuff you know you don't know (+ Stuff you know) - Technical Breadth
- Stuff you don't know you don't know
- Daily invest atleast 20 mins on yourself to increase technical breadth
- Read these books
-
25 Years of Software Development: Inside the Zoho Success Story - Hyther Nizam π
- Don't do heavy lifting in user thread.
- Don't trust any input from user.
- No single point of failure at ant level.
-
Agile Architecture: Impactful Change for Complex Orgs - Rick Maharaj
-
Software Architecture: The Hard Parts - Neal Ford π
- How to analyze Trade-offs?
- Business Drivers (Time to market) -> Architecture Characteristics (Maintainability,Testability,Deployability) -> Trade off Analysis (Performance,Maintenance)
- Watch out for "out of context" trap when analyzing trade-offs. - Shared lib vs Shared service
- Model relevant business scenarios to extract trade-offs - One payment service vs Multiple services with each payment type
- Compare like things - MECE lists (Mutually exclusive [no overlaps], Collectively exhuastive[cover entire space])
- Avoid over evangelizing a particular solution or technology - Topic vs Queue
- Don't overwhelem your business stakeholders with too many trade-off choices - Sync vs Async
- Use qualitative analysis to iterate on design, leading to quantative analysis
- There is no silver bullet in software architecture
- How to analyze Trade-offs?
-
Patterns of Event-Driven Architecture - Mark Richards π
- Event Driven vs Message Driven
Event Driven Message Driven Broadcast message to everyone Broadcast message to only known Topic Queue Topic owner is sender Queue owner is reciever Topic owner own's request payload Queue owner own's request payload - Event forwarding pattern
- Domain broker pattern
- Workflow state pattern
- Multibroker pattern
-
Six Essential Soft Skills for the Software Architect - Michael Carducci π
- Value driven development
- Problem space thinking
- Communication - Think, Act and Communicate strategically
- Time management
- Deep work is rare, valuable and meaningfull
- Shallow work is easily replicable
- Tools
- RescueTime
- Personal Kanban Board
- Empthy - Empthy means feeling with, Sympathy means feeling for
- Curosity
-
Code Review, you said? - Venkat Subramaniam π
- First law of Programming
- Lowering quality lengthens development time.
- We can't be agile if code sucks.
- What is agile development
- It is not about standup, scrum and velocity.
- It is feedback driven development.
- Types of feedback
- Active use of the product
- From automated tests
- Code reviews
- Pair rotation
- Technical and social
- Reviewer
- Help others learn
- Learn thing you didn't know
- Get familiar with application data
- Team
- Refactoring of code to reduce cost of changes
- Collective ownership
- Reduces truck factor
- Reduces a single point of failure
- Never review code that has not
- Been compiled
- Passed test
- Code quality
- Start with the tests
- Are the tests easy to understand
- Are they short
- AAA - Arrange -> Act -> Assert
- Code reviews are effective when developers ask for it.
- Ask early and frequently if you want feedback.
- Ask in the end if you want blessings.
- Be continous, not episodic
- Review in stages not in features
- How to review?
- Go beyond coding styles
- Don't fix bug write test first
- Be constructive
- Don't say what is terrible
- Instead syat what can be better, how and why
- Make it safe to be honest
- First law of Programming
-
Mastering Cloud Scalability and System Designs Deep-dive - Rohit Bhardwaj
- p99 latency - It's 99th percentile. It means that 99% of the requests should be faster than given latency. In other words only 1% of the requests are expected to be slower.
- Productive System Context Diagram - Level 0 DFDs, also known as context diagrams, are the most basic data flow diagrams. They provide a broad view that is easily digestible but offers little detail. Level 0 data flow diagrams show a single process node and its connections to external entities.
- DB Engines
- Response time - 250 milliseconds
- Apache Spark - Apache Spark is an open-source, distributed processing system used for big data workloads. It utilizes in-memory caching, and optimized query execution for fast analytic queries against data of any size.
- Meta-modern Software Architecture - Neal Ford π
- Prefer duplication over coupling
- Data Mesh - A data mesh is a decentralized data architecture that organizes data by a specific business domainβfor example, marketing, sales, customer service, and moreβproviding more ownership to the producers of a given dataset
- Service Mesh - In software architecture, a service mesh is a dedicated infrastructure layer for facilitating service-to-service communications between services or microservices using a proxy
- Is your Code Net-zero? - Gunasundari Sridhar
- Upgrade to Modern Java - Kenneth Kousen π
- Java is Agile because of 6 month release cycle after Java 10.
- JDK 20 released in March 2023 and JDK 17 is LTS.
- Function Interface
- Consumer - Take input and return nothing
- Supplier - Take no input and return output
- Function - Take input and return output
- Predicate - Take input and return boolean
- Stream API
- Lambda Function
- CompletableFuture
- Type Inference
- var keyword
- Http Client
- Text Blocks
- Record
- Sealed classes/interfaces
- Switch expressions
- Pattern matching for switch expressions
- JPMS(Java Platform Module System) is good for only public libraries
- Testing Software Architecture - Mark Richards π
- Operational Characteristics
- Performance
- responsiveness
- availability
- scalability
- elasiticity
- data intigrity
- fault tolerance
- data consistency
- recoverability
- security
- concurrency
- reliability
- Structural Integrity - The law of demeter (principle of least knowledge)
- ArchUnit - Unit test java architecture
- Fitness functions - An architectural fitness function provides an objective integrity assesement of some architectureal characteristic(s).
- Triggered - Pre Production
- Continious - Post Production
- Operational Characteristics
- Granularity & Communication for Microservice Architectures - Neal Ford π
- Service granularity disintegrators - When should I consider breaking apart a service
- service functionality
- code volatality
- throughput and scalability
- fault tolerance
- access restriction
- Service granularity integrators - When should I consider putting services back together
- database transactions
- data dependencies
- workflow & coreography
- Difference between Synchronous and Asynchronous communication
- Difference between Orchetration and Choreography workflows
- Distributed transactions are very difficult to implement, if possible we should try to avoid it
- Transactional Sagas - Total 8 sagas possible based on below combinations
- Communication - Sync/Async
- Consistency - Atomic/Eventual
- Coordination - Orchestration/Choreography
- Service granularity disintegrators - When should I consider breaking apart a service
- Spring Apps at Scale - from 0 to 5B to 100B+ Requests - Josh Long, Asir Selvasingh π
- Azure Spring Apps - Build and deploy Spring Boot applications with a fully managed service from Microsoft and VMware.
- Spring Cache
- Reactive Spring
- Spring Native - GraalVM
- Decomposition Patterns - Mark Richards π
- Identify and size logical components - The larger the component the more coupled it is from rest of the system
- Flatten components - Root namespaces(packages) should not have any code in it
- Analyze component dependencies - There are tools available
- Create domain component
- Create domain service
- Microservices system -
- It is not mandatory to break each domain service to microservices
- Each microservice should have seperate database