Sep 22, 2015

A modern application on Cloud - Part 1

I came from Java background and monolithic EAR, and time has shown me only changes. We are now in a totally different world and it seems companies like Amazon and Google runa parallel universe.
If we start local we made changes slowly one by one but literaly we made huge changes SOAP to REST, Monolithic to MicroServices, From Ant to DevOps, and From Waterfall to Agile. Cloud computing long time back and not long ago we realized without these PaaS's we are incomplete.
We exposed stateless REST services passing all 3 maturity models, and packaged as microservices with embedded servers, but we still need to deal with changing infrastructure. This is where Dockers came in.

Application Containers are a way bundling and running applications in an extremely portable way.
and services the application requires.
A developer can put an application or service inside a container, along with the runtime requisites. Developers can run a
container on a workstation, create an app in that container, save it in a container image,
and then deploy the app on any virtual or physical server running the same operating
system - and expect the application to work.
A container is a stripped-to-basics version of a Linux operating system. An image is software you load into a container. Containers are best for encapsulating microservice for portability and flexibility. Stateless Containers contain app, runtimes, libraries, etc. and can be moved from any machine - physical or virtual. Read More on OpenStack
 
 Docker popularized the idea of the container image.
They provide a straightforward way for
developers to package an application and its dependencies in a container image that can run on
any modern Linux.
 On right we see a command to create and run a docker. 
Things look simple when everything is stateless. We thrive to expose resources with REST Services and design API's to stimulate stateless flows. Container containes ready to deploy self contained applications, but we need a glue because in many cases containers do not run in isolation, they need network resources, remote API calls, exchange messages, etc. Cloudify is such an orchestration framework.

One example of docker is Netflix.
But even Netflix uses EC2.

A modern app is miminal set of below technologies -
  

But if we start with basics and assume we take step by step to move from shipping simple war's to dockers. 

The first step towards Cloud is Develop and package your application as usual and deploy it into Cloud, where Cloud is just like any Application Server instead small difference - Cloud provider will provide you commands or console to upload or move package and your application will be deployed on Application Server managed by Cloud provider. Cloud provider will also provide Database, MQ, etc connection facility. You need to provide the Database (DS, Username, password, url) or MQ(host, port, channel, Queue, etc.) connection details and Cloud provider will connect your application to them, and here you are managing your Database and MQ. This was most basic Cloud which just manages application, but benefit is you can scale your application dynamically, Cloud provider will manage Web Server, Load balancer, Security, Application Server, and your Application. 

A little more advance Cloud will provide App Servers, Database, and middleware. JBOSS OpenShift is this Cloud, which provides a Platform as a Service (PaaS). PaaS provides users with hardware and software required by application to run. 

Share:

Sep 5, 2015

Practical Agile

Principles of Agile


Individuals and interactions over processes and tools
Working software over comprehensive documentation
Customer collaboration over contract negotiation
Responding to change over following a plan

A big change is in thinking from Waterfall to Agile is that in Waterfall we know very clearly what we are building.  Indeed if we know what we are going to build, which also means we know tools, technologies, Operations, Architecture, resources, etc.  But we live in ever changing world where only time follows the same cycle minute after minute, hour after hour, and so on.
We keep time roughly constant and build in that time in iterative manner.  Our customers are in highly competitive market, they know they need vehicle but they don't know they need exact model.
A customer can give example of BMW X5, but this is not what he exactly wants.
And so we deliver in iterative manner -
One example is we first deliver a skate board, then cycle, then motorbike, then car, and customize car.

Agile is an iterative and incremental model of approaching planning, designing, developing, and delivering. Software development is a complex process where we probe, sense, and respond
In Agile we focus not only on delivery but also on early delivery.  No Big upfront planning, no big upfront design, no big bang theory, and no big phases, and neither jigsaw puzzle.

Incremental vs Iterative

Source - http://www.infoq.com/resource/news/2008/01/iterating-and-incrementing/en/resources/Patton_Incremental_Iterative_MnaLisa.jpg

An Agile team are made up of people with required skills, expertise, and authority to complete the specific task, or a minimum of all user stories in current Sprint backlog.


Best results are gained with co-located team, but I believe same results can be achieved by dispersed team with modern technologies such as web camera, webex, video conference, etc.
Daily Scrum or sometimes called Daily Standup should be done in same place with whiteboard using kanban approach, but it can also be done using tools like JIRA and video conferencing.  We used whiteboard initially, but after days we found it hard to share the whiteboard. Not everyone is updated with current state of whiteboard as it requires sharing whiteboard image after any status change of any task. When we shared whiteboard in video conferencing, some had poor connection and they were unable to view it clearly. Later we decided to also use JIRA, and then we found it hard to maintain tasks at two places - Whiteboard and JIRA. Lastly we decided to only use JIRA.
We had short development cycles and regular delivery but without pair programming. No two person have same skills and it becomes personal when they do pair programming.
Another major step is Continuous Delivery, which meant automated testing and automated build.
And Last Step is Iterative Releases

In big organizations, One simply doesn't starts with Sprint 1 instead Agile needs to be incorporated into existing established practices.
Merging and mixing methodologies will create confusion and so moving towards Agile is extremely cautious process and must be done with help of coaches and experts.
Typically we still have few - four stages - Initiation (Risk, Regulatory, ROI, etc.), Inception (Rough planning with Rough Design), Sprints (Design, develop, test, and build), Iterations(release).
A project will have a team to complete stages and team will constitute of Product Owner, Scrum Master, and Development Team (which might also include architect and tester).
Apart from above team, an organizations have secondary teams - Business Analysts, Performance Testing, Technical Experts, and other Specialists - for occasional support.

Waterfall to Agile Shift -
Practically Agile Still has Stagesand stages are same as defined in Project Management standards. I still feel there 4 major process groups -
Management & Control, Plan & Design, and Execute.
Lets forget for some time the original 5 process groups and 47 knowledge areas

Management & Control


Plan & Design
Plan & Design will also include planning for Security Requirements, Testing Requirements, and Business Requirements. Deliverable will include Signed off business requirements along with incorporating requirements into design. 3rd party contracts, review of design, and presentation of design. 

Execute

Sprints based on Scrum framework.
Source - http://techiejs.com
Outcome of every Sprint is an addition to Finished Work (Software Product).
When its decided to Release this product, then some SDLC documents need to be produced: Operational Risk Impact Assessment, Implementation Plan, Test Completion Report, High Level Operational Design, Approval, and RAID Log approval.

Tips:

A helpful article on InfoQ combined with another helped me prepare these useful tips
  1. Remove the developer urge to shrink backlog, instead remain motivated to work as planned in Sprint planning meeting, and dont get distracted by blockers.
  2. Existing project managers have experience in fixing impediments, resolving conflicts, and organization culture, so they should accept role of Scrum Master, if they wish.
  3. Office Space should be very well ordered so that multiple scrum teams can sit and work on same floor.
  4. Technologies and processes should support Agile such as Microservices, DevOps, and Cloud
  5. Automated testing, Quicker Code review, Build tools
  6. In scaled Agile, a solid coordination is required on "Definition of Done" and "Scrum of Scrums".
  7. In scaled Agile, break user stories into functions rather than one line tasks.

Below is top three Impediments for Agile Adoption by InfoQ voting, which says who to blame -
  1. Organisational culture is not aligned with Agile value.
  2. Insufficient executive support.
  3. Existing project management processes/rules

Also according to InfoQ voting, what is most important for Agile Adoption -
  1. Continous Integration
  2. Automated Testing
  3. User Stories
Share:

Sep 4, 2015

Digital Communication and Positivity

"If we become socially isolated and communicate only by text, never face to face, then we may be eroding our capacity to connect instead of building it up." - Dr. Fedrickson

I am quite student of Dr. Fedrickson: I have never met her, but I reading her book. I read her interview with Angela Winter

Further in the interview Dr. Fedrickson recommend -
"The positive experiences we have in conjunction with others are like nutrients: we need daily doses of them in order to stay healthy. But contemporary culture encourages us to reach out through technology. Though e-mail and text­ing and social media are great in many ways, they potentially have costs.In the future I’d like to look at the bodily effects of communicating through electronic mediums versus face to face and see what the differences are. When we connect with people online, we certainly experience a lot of positive emotions, but maybe they’re not reverberating and building off each other. Seeing you smile makes me happy in a subtle but perceptible way that may not occur when I just see the little smiley emoticon. "

If we read carefully and take it seriously then should we avoid using WhatsApp, and prefer Skype, or speaking in general we should prefer video chat over text chat. Video chat using older technologies was not preferable because our eyes were focused more on keyboard than to webcam and with slow connections there was less facial mimicry. But recent advancements in technologies and network make conversations so live, like the below image from Skype looks so live -
 Positive Resonance is about sharing smile. When we smile, we share smile, we feel positive emotion and we evoke positive emotion. Whats vital is when we talk face to face sharing positivity becomes easier, a level which can never be achieved using texts or messages. A healthy relationship requires frequent face to face conversation or at least on phone, otherwise it slowly dies.
We need video calls to be more natural and one that allows to look inside the other person and his or her world. A video call that shares smile not smileys. May be Magic window or 3D video calling from Skype.   All social networks Facebook, Google talk, WhatsApp, etc feature video calling, and technologies are improving supporting mobile and tablets with real time experiences.

How facebook made me numb 
We have experienced that, personally slowly I have lost contact with my ex-collegues even though they are in my friend list in facebook, and how many of us are really active on facebook to be in contact, many of us made it either business to promote products and politics or boring. Some heated conversations over facebook and some super boring repeated posts from our friends have made some of us socially numb. I used to have arguments over facebook which resulted in loss of friendship (on facebook) and later I decided to shut the fuck up and keep my mouth shut and avoid arguments, which I think is making me socially numb. Well I believe if I had redular conversation on phone or face to face i would have retained the friendship.

Future Social Platforms
 Real-time video communication is poised to become one of the most transformative technologies of the coming decade, and could be a major disruptive force in domains from business to health to education - Jake Dunagan
Future social platforms need to focus more natural conversations compared to facebook.
Future Social platforms should try to connect positive emotions with social tools.
"Real-time video communication is poised to become one of the most transformative technologies of the coming decade, and could be a major disruptive force in domains from business to health to education," - See more at: http://www.iftf.org/our-work/people-technology/technology-horizons/the-future-of-real-time-video-communication/#sthash.MqdUFqqw.dpuf
"Real-time video communication is poised to become one of the most transformative technologies of the coming decade, and could be a major disruptive force in domains from business to health to education," - See more at: http://www.iftf.org/our-work/people-technology/technology-horizons/the-future-of-real-time-video-communication/#sthash.MqdUFqqw.dpuf
Share:
© Shift, ShEkUP, Shape, and Surprise | All rights reserved.
Blogger Template Crafted by pipdig