Saturday, February 22, 2020

Containerizing your apps 3 - ELK vs Amazon Cloudwatch vs Google Stackdriver




Pros
Cons
ELK
Good for non cloud apps. AWS and GCP has their own log monitoring system.
Comes with complete search engine called Elasticsearch
Near real time processing
Complete dashboards
Not good for cloud native apps ( Apps in AWS , GCP )
Required configuration of 3 components. ( Elasticsearch, Logstash, Kibana dashboard )


Elasticseach required heavy memory


AWS CloudWatch
Can monitor infrastructure
Supports alerting
Supports Dashboards
CloudWatch Supports many matrices
Can monitor resource utilization
Flirtations works very fast
Near real time processing
Can export data to S3 buckets
Dashboard configuration takes time across multiple filtration


Not supports app level debugging as of 2020
Google Stackdriver
Support app level debugging without changing the app or adding new log lines
Can monitor infrastructure
Support wide range of matrices
Easy configurations
Easy dashboards
Supports AWS VMs


Better than ELK and same as AWS CloudWatch. Excludes app level dubbing feature which is not available in AWS as of 2020

Tuesday, February 11, 2020

Agile software development and Microservices model to overcome Agile pitfalls

It is an engineering discipline and practice based on values and principles of agile manifesto. This promotes self-organizing cross-functional team to deliver working product. This promotes adaptive planning, evolutionary development, early delivery, and continual improvement, and it encourages rapid and flexible response to change.


There are common incidences that makes agile smell. 

1. Lack of expertise knowledge
2. Lack of training
3. Adding stories to current sprint
4. Problem solving in daily stand-ups
5. Lack of test automation and developer unit testing
6. Time-boxed deliveries reduce overall quality



How microservices overcome Agile pitfalls

1. Developers can focus on specific functionalities as they deploy separately. 
2. Reduce high code coupling and easy for developer unit testing
3. Independent deployment to each module welcome quick changes and deployments
4. Availability of well tested microservice frameworks,cloud environments makes easy project setups and deployments
5. Easy to manage version control and minimum code conflicts due to independent modules
6. Easy to adopt CICD , support devops for maintenance including high scalabilities and availability

Monday, February 10, 2020

12 principles of Agile Manifesto

1. Customer satisfaction
2. Welcome changes at any time
3. Frequent deliveries of working software
4. Developers and business people work together
5. Involve motivated individuals, trust them with proper working environment.
6. Face-to-face discussion with-in development team
7. Working software is primary measure of progress
8. Sustainable development with minimizing bugs, reusable components, high quality codes to make evolvable software, low maintenance cost
9. Continuous attention on technical excellency and good designs
10. Simplicity to reduce amount of effort
11. Self organized team
12. Regular intervals to become more effective and adoption for better software

Based on https://agilemanifesto.org/principles.html

Branch merge and re-integration cycles

Bellow steps explains how to deal with same source by two team without having any source code conflicts.


Assume 2 teams are working on same source code.
Team B create branch from Trunc ( Master branch )
Team C create branch from Trunc ( Master branch )



Day 1 : Changes to branch B by team B
Day 1 : Changes to branch C by team C
Day 2 : Team B merge branch B from trunc for any changes
Day 2 : Team C merge branch C from trunc for any changes
Day 2 : Changes to branch C by team C
Day 2 : Team C merge branch C from trunc for any changes
Day 2 : Team C release branch C for testing
Day 2 : Team B merge branch B from trunc for any changes
Day 2 : Testing team test the branch C and do the production deployment
Day 3 : Testing team observation on any production issues
Day 3 : If no issues observed , team C re-integrate branch C to trunc
        If there are issues observed in recent release, then team C merge branch C for any changes and release fixes for issues observed.
        Testing team test the branch C and do the production deployment
Day 4 : Team B merge branch B from trunc for any changes
Day 5 : Team C merge branch C from trunc for any changes
Day 5 : Team C re-integrate branch C to trunc
Day 6 : Testing team test trunc for recent changes and smoke test on overall functionalities
Day 7 : Team B merge branch B from trunc for any changes
Day 7 : Team B release branch B for testing
Day 7 : Testing team test the branch B and do the production deployment
Day 7 : Testing team observation on any production issues
Day 8 : If no issues observed , team B re-integrate branch B to trunc
        If there are issues observed in recent release, then team B merge branch B for any changes and release fixes for issues observed.
        Testing team test the branch B and do the production deployment