Tuesday, 24 October 2017

Docker is the buzzword of the Tech Town, and I don’t mean apparel brand or a new series of watch. Chances are, you already heard about the terms Docker and containerization and probably wondering what it is. If you are in the business of software development or the project manager who overseas production deployments of software, this blog post is for you.

Container technology has been around since the days of the mainframe, but it has resurged in the last couple of years due to the increase in virtualization, the decrease in emphasis on operating systems in the cloud, and the firm establishment of Linux . Docker, originally a proprietary system that started as a project by Solomon Hykes at dotCloud, Docker was shifted to open source in the first part of 2013. By the middle of 2015, more than 300 million container downloads had occurred.

Img source : Docker

Docker is an open-source system of software containers. Containers help software to run while it is being moved from one environment to another, such as from a developer’s computer to staging to production. We all know that there are always minor differences between environments in development and release lifecycles. These differences may be because of different package versions, configurations of end systems or dependencies. Simply put, Docker can address that gap by ensuring consistent environments from development to production.

Docker containers are configured to maintain all configurations and dependencies internally. As a result, you can use the same container from development to production making sure there are no discrepancies or manual intervention.

This is huge when it comes to Apps management scenarios like

Scenario1:“Works on my machine “says your peers and yet the software fails to do the right action on yours.

Scenario 2:The production bug is untraceable in the UAT environment and you are not able to reproduce to do further analysis.

Scenario 3:you hit a brick wall and don’t know how to proceed with troubleshooting the roll out.Docker brings in an API for container management, an image format and a possibility to use a remote registry for sharing containers. This scheme benefits both developers and system administrators with advantages such as Rapid Application Development, Portability Across Machines, Version control, Sharing containers, lightweight foot print and easy maintenance.

Virtual Systems and Docker

Img source : Docker

One thing to note is that Docker is not another VM. in contrast to VMs, Docker is not (only) about optimal resource sharing of hardware, moreover it provides a "system" for packaging application. A full virtualized system gets its own set of resources allocated to it, and does minimal sharing. You get more isolation, but it is much heavier (requires more resources). With Docker you get less isolation, but the containers are lightweight (require fewer resources). So, you could easily run thousands of containers on a host, and it won't even blink.

The 3 Major benefits of Docker when it comes to Managing Apps:

Isolation

Docker ensures your applications and resources are isolated and segregated.

Docker makes sure each container has its own resources that are isolated from other containers. You can have various containers for separate applications running completely different stacks.

Aside from this, effectively removing applications from your server is quite difficult and may cause conflicts with dependencies. However, Docker helps you ensure clean app removal since each application runs on its own container.

One of the biggest advantages to a Docker-based architecture is standardization. Docker provides repeatable development, build, test, and production environments.

Standardizing service infrastructure across the entire pipeline allows every team member to work on a production parity environment. By doing this, engineers are more equipped to efficiently analyze and fix bugs within the application.

Security

Docker ensures that applications that are running on containers are completely segregated and isolated from each other, granting you complete control over traffic flow and management.

No Docker container can view or access processes running inside another container.

As a means of tightening security, Docker uses host OS sensitive mount points (e.g., ‘/proc’ and ‘/sys’) as read-only mount points and uses a copy-on-write filesystem to make sure containers can’t read each other’s data. It also limits system calls to your host OS. Since Docker containers are isolated and resources are limited, even if one of your applications is hacked, it won’t affect applications that are running on other Docker containers.

Summary

Apart from these major advantages, Docker also supports Multi-Cloud Platforms. One of Docker’s greatest benefits is portability. Over last few years, all major cloud computing providers, including Amazon Web Services (AWS) and Google Compute Platform (GCP), have embraced Docker’s availability and added individual support. Docker containers can be run inside an Amazon EC2 instance, Google Compute Engine instance, Rackspace server or VirtualBox, provided that the host OS supports Docker.

In conjunction with cloud computing, the benefits mentioned above definitely demonstrate how Docker is an effective open source platform. To know how you can benefit from using Docker in your Coding, Testing and Implementation of Enterprise Software Application, please get in touch with us here. Thanks for stopping by and have a fantastic day.

Monday, 2 October 2017

If only I had a dollar for every change after I had finished typing the Requirement specifications document. I know I am not the only one who feels this way. Especially in Agile enterprise software development projects, change is not only unavoidable but also inevitable.

The agile enterprise software projects often evolve during the life cycle making it harder to track by the stake holders. And I have personally witnessed traditional business Analysis approaches failing to cope up during these project changes.

The BA role itself has many flavors, in fact many Business Analysts like me often grow organically into the role and hence the way one operates would differ from the other.

There are pure requirement analysts who’s only and sole job is to elicit requirements. On the other hand, system analysts analyses the requirements and determine if the system fulfill those requirements. Then there are Business Analysts who are solely focused on Business and making improvements to it. Then of course, we have multiple combination of above said types. The point I am trying to make is, one rule doesn’t fit all.

Towards Agile Development Analysts:

Despite all the differences the major objective of a BA in my opition is to enhance the communication between the project stake holders and developers.

In Agile development model especially in enterprise software development projects, traditional communications needs to be enhanced and enriched.

The following are the main areas which I think would be highly beneficial to revisit and tailor according to the situation.

1. Ignore Tags and Titles, focus on the objective:

Instead of cumbersome traditional documentations can we use prototypes as the documentation method? What other tasks could we drop or relook.

Identify what new tasks you can take on instead of traditional ones such as account handling or pre-sales. I say focus on the task and ignore the tags and titles.

2. Skills, Skills and Skills

The very basis of Agile development is to assist the development faster. In order to do so, the Developer needs to know what to work on and how to complete the task to meetthe business requirement. This is where prototypes plays an important role. For example, I create Photoshop prototype images which are used for focus group and project brainstorming. The prototype images goes through series of iteration and refinement. Then these final prototypes are passed directly to programmers after the approval from stake holders.

Skills such as Application Design and using project management tools plays an important role in Agile development process.

3. Collaborations

Instead of practising traditional modes of communication and boundaries, IT BA’s should be given the freedom to collaborate with different stake holders and developers of the project in open forum. This could be virtual and synchronous to organisation's culture and values.

Why not think of a WhatsApp group to enhance project discussion? Why not even involve your experienced developer and an experienced business veteran in a discussion about the project challenges?

4. Tools!

Project development tools are plenty and you can even find cheaper ones which serves much better purpose while managing the project. Modern requirement tools provide requirement analysis with virtualization, analysis, traceability and reuse capabilities. It can make the BA role and that of stake holders so easy, in refining and filtering out the information noise. They can then be integrated with the tools that development team use, making it robust form of collaboration.

Like screen recording of customer existing system which captures the features that needs to be worked on the upgraded version and attaching those clips as work items to the Project Management Tool.

5. Environmental Factors.

Most of the IT environments are evolving and trying to catch up with growing technologies. The boundary between one system and another has become minimal. Hence changes to one system will have impact on other existing systems. BA need to have a holistic view and approach towards compiling these hidden aspects of the project.

Strong business analysis skills are important in software development, regardless of project characteristics or the methodology used. The ability to think quickly on feet , develop new ways and use creative thinking becomes important aspect of the BA in Agile software development projects. To know how BA can benefit your upcoming project please contact us here.