Technology Listing (Week 3, Jan 2020)


1. Apache Spark Streaming

Spark Streaming uses Spark Core's fast scheduling capability to perform streaming analytics. It ingests data in mini-batches and performs RDD transformations on those mini-batches of data. This design enables the same set of application code written for batch analytics to be used in streaming analytics, thus facilitating easy implementation of lambda architecture. However, this convenience comes with the penalty of latency equal to the mini-batch duration. Other streaming data engines that process event by event rather than in mini-batches include Storm and the streaming component of Flink. Spark Streaming has support built-in to consume from Kafka, Flume, Twitter, ZeroMQ, Kinesis, and TCP/IP sockets.

In Spark 2.x, a separate technology based on Datasets, called Structured Streaming, that has a higher-level interface is also provided to support streaming.

Spark can be deployed in a traditional on-premises data center as well as in the cloud.

Ref 1: https://en.wikipedia.org/wiki/Apache_Spark
Ref 2: https://en.wikipedia.org/wiki/Lambda_architecture

2. Apache Kafka

Apache Kafka is an open-source stream-processing software platform developed by LinkedIn and donated to the Apache Software Foundation, written in Scala and Java. The project aims to provide a unified, high-throughput, low-latency platform for handling real-time data feeds. Kafka can connect to external systems (for data import/export) via Kafka Connect and provides Kafka Streams, a Java stream processing library. Kafka uses a binary TCP-based protocol that is optimized for efficiency and relies on a "message set" abstraction that naturally groups messages together to reduce the overhead of the network roundtrip. This "leads to larger network packets, larger sequential disk operations, contiguous memory blocks [...] which allows Kafka to turn a bursty stream of random message writes into linear writes."

Apache Kafka is based on the commit log, and it allows users to subscribe to it and publish data to any number of systems or real-time applications. Example applications include managing passenger and driver matching at Uber, providing real-time analytics and predictive maintenance for British Gas’ smart home, and performing numerous real-time services across all of LinkedIn.

Ref 1: https://en.wikipedia.org/wiki/Apache_Kafka
Ref 2: Commit Log: https://en.wikipedia.org/wiki/Commit_(data_management)

3. Amazon Web Services

Amazon Web Services (AWS) is a subsidiary of Amazon that provides on-demand cloud computing platforms and APIs to individuals, companies, and governments, on a metered pay-as-you-go basis. In aggregate, these cloud computing web services provide a set of primitive abstract technical infrastructure and distributed computing building blocks and tools. One of these services is Amazon Elastic Compute Cloud, which allows users to have at their disposal a virtual cluster of computers, available all the time, through the Internet. AWS's version of virtual computers emulate most of the attributes of a real computer, including hardware central processing units (CPUs) and graphics processing units (GPUs) for processing; local/RAM memory; hard-disk/SSD storage; a choice of operating systems; networking; and pre-loaded application software such as web servers, databases, and customer relationship management (CRM).

The AWS technology is implemented at server farms throughout the world, and maintained by the Amazon subsidiary. Fees are based on a combination of usage (known as a "Pay-as-you go" model), the hardware/OS/software/networking features chosen by the subscriber, required availability, redundancy, security, and service options. Subscribers can pay for a single virtual AWS computer, a dedicated physical computer, or clusters of either. As part of the subscription agreement, Amazon provides security for subscribers' system. AWS operates from many global geographical regions including 6 in North America.

In 2019, AWS comprised more than 165 services spanning a wide range including computing, storage, networking, database, analytics, application services, deployment, management, mobile, developer tools, and tools for the Internet of Things. The most popular include Amazon Elastic Compute Cloud (EC2) and Amazon Simple Storage Service (Amazon S3). Most services are not exposed directly to end users, but instead offer functionality through APIs for developers to use in their applications. Amazon Web Services' offerings are accessed over HTTP, using the REST architectural style and SOAP protocol.

Amazon markets AWS to subscribers as a way of obtaining large scale computing capacity more quickly and cheaply than building an actual physical server farm. All services are billed based on usage, but each service measures usage in varying ways. As of 2017, AWS owns a dominant 34% of all cloud (IaaS, PaaS) while the next three competitors Microsoft, Google, and IBM have 11%, 8%, 6% respectively according to Synergy Group.

Ref: https://en.wikipedia.org/wiki/Amazon_Web_Services

4. Redis

Redis (Remote Dictionary Server) is an in-memory data structure project implementing a distributed, in-memory key-value database with optional durability. Redis supports different kinds of abstract data structures, such as strings, lists, maps, sets, sorted sets, HyperLogLogs, bitmaps, streams, and spatial indexes. The project is mainly developed by Salvatore Sanfilippo and as of 2019, is sponsored by Redis Labs. It is open-source software released under a BSD 3-clause license.

Differences with other database systems:
Redis made popular the idea of a system that can be considered at the same time a store and a cache, using a design where data is always modified and read from the main computer memory, but also stored on disk in a format that is unsuitable for random access of data, but only to reconstruct the data back in memory once the system restarts. At the same time, Redis provides a data model that is very unusual compared to relational database management system (RDBMS), as user commands do not describe a query to be executed by the database engine, but specific operations that are performed on given abstract data types, hence data must be stored in a way which is suitable later for fast retrieval, without help from the database system in form of secondary indexes, aggregations or other common features of traditional RDBMS. The Redis implementation makes heavy use of the fork system call, to duplicate the process holding the data, so that the parent process continues to serve clients, while the child process creates a copy of the data on disk.

Ref: https://en.wikipedia.org/wiki/Redis


5. NetBeans

NetBeans is an integrated development environment (IDE) for Java. NetBeans allows applications to be developed from a set of modular software components called modules. NetBeans runs on Windows, macOS, Linux and Solaris. In addition to Java development, it has extensions for other languages like PHP, C, C++, HTML5, and JavaScript. Applications based on NetBeans, including the NetBeans IDE, can be extended by third party developers.

Original author(s) Roman Staněk
Developer(s) 
Apache Software Foundation
Oracle Corporation
Stable release 
11.2 update 1 / December 3, 2019; 39 days ago
Preview release 
11.2 / July 21, 2019; 5 months ago
Repository NetBeans Repository
Written in Java
Operating system Windows, macOS, Linux, Solaris; feature-limited OS independent version available
Platform Java SE, Java EE, JavaFX
Available in 28 languages
List of languages
Type IDE
License Apache License 2.0 (previously CDDL or GPLv2 with classpath exception)
Website netbeans.apache.org

Ref: https://en.wikipedia.org/wiki/NetBeans

6. IntelliJ IDEA

IntelliJ IDEA is an integrated development environment (IDE) written in Java for developing computer software. It is developed by JetBrains (formerly known as IntelliJ), and is available as an Apache 2 Licensed community edition, and in a proprietary commercial edition. Both can be used for commercial development.

Features
Coding assistance
The IDE provides certain features like code completion by analyzing the context, code navigation which allows jumping to a class or declaration in the code directly, code refactoring, linting and options to fix inconsistencies via suggestions.

Built in tools and integration
The IDE provides integration with build/packaging tools like grunt, bower, gradle, and SBT. It supports version control systems like Git, Mercurial, Perforce, and SVN. Databases like Microsoft SQL Server, Oracle, PostgreSQL, SQLite and MySQL can be accessed directly from the IDE in the Ultimate edition, through an embedded version of DataGrip.

Plugin ecosystem
IntelliJ supports plugins through which one can add additional functionality to the IDE. Plugins can be downloaded and installed either from IntelliJ's plugin repository website or through the IDE's inbuilt plugin search and install feature. Each edition has separate plugin repositories, with both the Community and Ultimate editions totaling over 3000 plugins each as of 2019.

Supported languages
The Community and Ultimate editions differ in their support for various programming languages as shown in the following table. Supported in both Community and Ultimate Edition:

Clojure (via a plugin)
CloudSlang (via a plugin)
Dart (via a plugin)
Elm (via a plugin)
Erlang (via a plugin)
Go (via a plugin)
Gosu (via a plugin)
Groovy
Haskell (via a plugin)
Haxe (via a plugin)
Java
Julia (via a plugin)
Kotlin
Lua (via a plugin)
Perl (via a plugin)
Python (via a plugin)
Rust (via a plugin)
Scala (via a plugin)
XML/XSL
R (via plugin)
Supported only in Ultimate Edition:

ActionScript/MXML
CoffeeScript
HTML/XHTML/CSS
JavaScript
PHP (via a plugin)
Ruby/JRuby
SQL
TypeScript
Technologies and frameworks
Supported in both Community and Ultimate Edition:

Android
Ant
Gradle
JUnit
JavaFX
Maven
Python
SBT
TestNG
Supported only in Ultimate Edition:

Django
EJB
FreeMarker
Geronimo
GlassFish
Google App Engine
Google Web Toolkit
Grails
Hibernate/JPA
JBoss Seam
JBoss
Jetty
Java ME MIDP/CLDC
JSF
JSP
Jelastic
Node.js
OSGi
Play
Ruby on Rails
Spring
Struts 2
Tapestry
Tomcat
Velocity
Web services
Weblogic
WebSphere

There was a free plugin from Atlassian for IntelliJ available to integrate with JIRA, Bamboo, Crucible and FishEye. However, the software called IDE-Connector was discontinued on June 1, 2015.

Software versioning and revision control
The two editions also differ in their support for software versioning and revision control systems.

Supported in both Community and Ultimate Edition:

CVS
Git
GitHub
Mercurial
Subversion
Azure DevOps (formerly TFS/VSTS; via plug-in)

Supported only in Ultimate Edition: 

Visual SourceSafe
Perforce
ClearCase

Ref: https://en.wikipedia.org/wiki/IntelliJ_IDEA

7. Eclipse

Eclipse is an integrated development environment (IDE) used in computer programming. It contains a base workspace and an extensible plug-in system for customizing the environment. Eclipse is written mostly in Java and its primary use is for developing Java applications, but it may also be used to develop applications in other programming languages via plug-ins, including Ada, ABAP, C, C++, C#, Clojure, COBOL, D, Erlang, Fortran, Groovy, Haskell, JavaScript, Julia, Lasso, Lua, NATURAL, Perl, PHP, Prolog, Python, R, Ruby (including Ruby on Rails framework), Rust, Scala, and Scheme. It can also be used to develop documents with LaTeX (via a TeXlipse plug-in) and packages for the software Mathematica. Development environments include the Eclipse Java development tools (JDT) for Java and Scala, Eclipse CDT for C/C++, and Eclipse PDT for PHP, among others.

The initial codebase originated from IBM VisualAge. The Eclipse software development kit (SDK), which includes the Java development tools, is meant for Java developers. Users can extend its abilities by installing plug-ins written for the Eclipse Platform, such as development toolkits for other programming languages, and can write and contribute their own plug-in modules. Since the introduction of the OSGi implementation (Equinox) in version 3 of Eclipse, plug-ins can be plugged-stopped dynamically and are termed (OSGI) bundles

Eclipse software development kit (SDK) is free and open-source software, released under the terms of the Eclipse Public License, although it is incompatible with the GNU General Public License. It was one of the first IDEs to run under GNU Classpath and it runs without problems under IcedTea.


Stable release: 4.14 (2019-12 release) / 18 December 2019; 27 days ago
Preview release: 4.14 (2019-12 release)
Repository: git.eclipse.org/c/

Written in: C and Java
Operating system: Linux, macOS, Solaris, Windows
Platform: Java SE, Standard Widget Toolkit, x86-64

Type: Programming tool, integrated development environment (IDE)
License: Eclipse Public
Website: www.eclipse.org

Ref: https://en.wikipedia.org/wiki/Eclipse_(software)

8. OpenShift

OpenShift is a family of containerization software developed by Red Hat. Its flagship product is the OpenShift Container Platform—an on-premises platform as a service built around Docker containers orchestrated and managed by Kubernetes on a foundation of Red Hat Enterprise Linux. The family's other products provide this platform through different environments: OKD serves as the community-driven upstream (akin to CentOS), OpenShift Online is the platform offered as software as a service, and Openshift Dedicated is the platform offered as a managed service.

Developer(s) Red Hat
Initial release May 4, 2011; 8 years ago
Stable release 
4.2.0 / October 16, 2019; 2 months ago
Repository 
github.com/openshift/origin
Edit this at Wikidata
Written in Go, Angular.js
Operating system Red Hat Enterprise Linux or Container Linux by CoreOS
Type Cloud computing, Platform as a service
License Apache License 2.0
Website openshift.com

[Platform as a service (PaaS) or application platform as a service (aPaaS) or platform-based service is a category of cloud computing services that provides a platform allowing customers to develop, run, and manage applications without the complexity of building and maintaining the infrastructure typically associated with developing and launching an app.

PaaS can be delivered in three ways:

As a public cloud service from a provider, where the consumer controls software deployment with minimal configuration options, and the provider provides the networks, servers, storage, operating system (OS), middleware (e.g. Java runtime, .NET runtime, integration, etc.), database and other services to host the consumer's application.
As a private service (software or appliance) behind a firewall.
As software deployed on a public infrastructure as a service.]

Ref 1: https://en.wikipedia.org/wiki/OpenShift
Ref 2: https://en.wikipedia.org/wiki/Platform_as_a_service

9. Google App Engine

Google App Engine (often referred to as GAE or simply App Engine) is a Platform as a Service and cloud computing platform for developing and hosting web applications in Google-managed data centers. Applications are sandboxed and run across multiple servers. App Engine offers automatic scaling for web applications—as the number of requests increases for an application, App Engine automatically allocates more resources for the web application to handle the additional demand.

Google App Engine primarily supports Go, PHP, Java, Python, Node.js, .NET, and Ruby applications, although it can also support other languages via "custom runtimes". The service is free up to a certain level of consumed resources and only in standard environment but not in flexible environment. Fees are charged for additional storage, bandwidth, or instance hours required by the application. It was first released as a preview version in April 2008 and came out of preview in September 2011.

Ref: https://en.wikipedia.org/wiki/Google_App_Engine

10. VirtualBox

Oracle VM VirtualBox (formerly Sun VirtualBox, Sun xVM VirtualBox and Innotek VirtualBox) is a free and open-source hosted hypervisor for x86 virtualization, developed by Oracle Corporation. Created by Innotek GmbH, it was acquired by Sun Microsystems in 2008, which was, in turn, acquired by Oracle in 2010.

VirtualBox may be installed on Windows, macOS, Linux, Solaris and OpenSolaris. There are also ports to FreeBSD and Genode. It supports the creation and management of guest virtual machines running Windows, Linux, BSD, OS/2, Solaris, Haiku, and OSx86, as well as limited virtualization of macOS guests on Apple hardware. For some guest operating systems, a "Guest Additions" package of device drivers and system applications is available, which typically improves performance, especially that of graphics.

Initial release: 17 January 2007; 12 years ago
Stable release: 6.1.2 / 14 January 2020
Repository: www.virtualbox.org/browser/vbox/trunk
Written in: C, C++, x86 Assembly
Operating system: Windows, macOS, Linux and Solaris
Platform: x64 only (version 5.x and earlier works on IA-32)
Type: Hypervisor
License: Base Package (USB support only for USB 1.1): GNU General Public License version 2 (Optionally CDDL for most files of the source distribution), "Extension Pack" (including USB 3.0 support): PUEL

A hypervisor (or virtual machine monitor, VMM) is a computer software, firmware or hardware that creates and runs virtual machines. A computer on which a hypervisor runs one or more virtual machines is called a host machine, and each virtual machine is called a guest machine. The hypervisor presents the guest operating systems with a virtual operating platform and manages the execution of the guest operating systems. Multiple instances of a variety of operating systems may share the virtualized hardware resources: for example, Linux, Windows, and macOS instances can all run on a single physical x86 machine. This contrasts with operating-system-level virtualization, where all instances (usually called containers) must share a single kernel, though the guest operating systems can differ in user space, such as different Linux distributions with the same kernel.

The term hypervisor is a variant of supervisor, a traditional term for the kernel of an operating system: the hypervisor is the supervisor of the supervisor, with hyper- used as a stronger variant of super-. The term dates to circa 1970; in the earlier CP/CMS (1967) system the term Control Program was used instead.

Ref 1: https://en.wikipedia.org/wiki/VirtualBox
Ref 2: https://en.wikipedia.org/wiki/Hypervisor

11. ZooKeeper

Developer(s): Apache Software Foundation
Stable release: 3.5.6 / October 18, 2019
Written in: Java
Operating system: Cross-platform
Type: Distributed computing
License: Apache License 2.0
Website: zookeeper.apache.org

Apache ZooKeeper is a software project of the Apache Software Foundation. It is essentially a service for distributed systems offering a hierarchical key-value store, which is used to provide a distributed configuration service, synchronization service, and naming registry for large distributed systems (see Use cases). ZooKeeper was a sub-project of Hadoop but is now a top-level Apache project in its own right.

ZooKeeper's architecture supports high availability through redundant services. The clients can thus ask another ZooKeeper leader if the first fails to answer. ZooKeeper nodes store their data in a hierarchical name space, much like a file system or a tree data structure. Clients can read from and write to the nodes and in this way have a shared configuration service. ZooKeeper can be viewed as an atomic broadcast system, through which updates are totally ordered. The ZooKeeper Atomic Broadcast (ZAB) protocol is the core of the system.

ZooKeeper is used by companies including Yelp, Rackspace, Yahoo!, Odnoklassniki, Reddit, NetApp SolidFire, Facebook, Twitter and eBay as well as open source enterprise search systems like Solr.

ZooKeeper was originally developed at Yahoo! for streamlining the processes running on big-data clusters by storing the status in local log files on the ZooKeeper servers. These servers communicate with the client machines to provide them the information. ZooKeeper was developed in order to fix the bugs that occurred while deploying distributed big-data applications.

Some of the prime features of Apache ZooKeeper are:

Reliable System: This system is very reliable as it keeps working even if a node fails.
Simple Architecture: The architecture of ZooKeeper is quite simple as there is a shared hierarchical namespace which helps coordinating the processes.
Fast Processing: ZooKeeper is especially fast in "read-dominant" workloads (i.e. workloads in which reads are much more common than writes).
Scalable: The performance of ZooKeeper can be improved by adding nodes.

Apache ZooKeeper Architecture
Some common terminologies regarding the ZooKeeper architecture:

Node: The systems installed on the cluster
ZNode: The nodes where the status is updated by other nodes in cluster
Client Applications: The tools that interact with the distributed applications
Server Applications: Allows the client applications to interact using a common interface

The services in the cluster are replicated and stored on a set of servers (called an "ensemble"), each of which maintains an in-memory database containing the entire data tree of state as well as a transaction log and snapshots stored persistently. Multiple client applications can connect to a server, and each client maintains a TCP connection through which it sends requests and heartbeats and receives responses and watch events for monitoring.

Use cases 
Typical use cases for ZooKeeper are:

Naming service
Configuration management
Synchronization
Leader election
Message queue
Notification system
Client libraries
In addition to the client libraries included with the ZooKeeper distribution, a number of third-party libraries such as Apache Curator and Kazoo are available that make using ZooKeeper easier, add additional functionality, additional programming languages, etc.

Apache projects using ZooKeeper
Apache Hadoop
Apache Accumulo
Apache HBase
Apache Hive
Apache Kafka
Apache Solr
etc.

Ref: https://en.wikipedia.org/wiki/Apache_ZooKeeper

12. USB flash drive

A USB flash drive is a data storage device that includes flash memory with an integrated USB interface. It is typically removable, rewritable and much smaller than an optical disc. Most weigh less than 30 g (1 oz). Since first appearing on the market in late 2000, as with virtually all other computer memory devices, storage capacities have risen while prices have dropped. As of March 2016, flash drives with anywhere from 8 to 256 GB were frequently sold, while 512 GB and 1 TB units were less frequent. As of 2018, 2 TB flash drives were the largest available in terms of storage capacity. Some allow up to 100,000 write/erase cycles, depending on the exact type of memory chip used, and are thought to last between 10 and 100 years under normal circumstances (shelf storage time).

USB flash drives are often used for storage, data back-up and transfer of computer files. Compared with floppy disks or CDs, they are smaller, faster, have significantly more capacity, and are more durable due to a lack of moving parts. Additionally, they are immune to electromagnetic interference (unlike floppy disks), and are unharmed by surface scratches (unlike CDs). Until about 2005, most desktop and laptop computers were supplied with floppy disk drives in addition to USB ports, but floppy disk drives became obsolete after widespread adoption of USB ports and the larger USB drive capacity compared to the 1.44 MB 3.5-inch floppy disk.

USB flash drives use the USB mass storage device class standard, supported natively by modern operating systems such as Windows, Linux, macOS and other Unix-like systems, as well as many BIOS boot ROMs. USB drives with USB 2.0 support can store more data and transfer faster than much larger optical disc drives like CD-RW or DVD-RW drives and can be read by many other systems such as the Xbox One, PlayStation 4, DVD players, automobile entertainment systems, and in a number of handheld devices such as smartphones and tablet computers, though the electronically similar SD card is better suited for those devices.

A flash drive consists of a small printed circuit board carrying the circuit elements and a USB connector, insulated electrically and protected inside a plastic, metal, or rubberized case, which can be carried in a pocket or on a key chain, for example. The USB connector may be protected by a removable cap or by retracting into the body of the drive, although it is not likely to be damaged if unprotected. Most flash drives use a standard type-A USB connection allowing connection with a port on a personal computer, but drives for other interfaces also exist. USB flash drives draw power from the computer via the USB connection. Some devices combine the functionality of a portable media player with USB flash storage; they require a battery only when used to play music on the go.

Ref: https://en.wikipedia.org/wiki/USB_flash_drive

13. JIRA

Jira is a proprietary issue tracking product developed by Atlassian that allows bug tracking and agile project management.

According to Atlassian, Jira is used for issue tracking and project management by over 75,000 customers in 122 countries. Some of the organizations that have used Jira at some point in time for bug-tracking and project management include Fedora Commons, Hibernate, NASA, Skype Technologies, Twitter, the United States Department of Defense, and the Apache Software Foundation, which uses both Jira and Bugzilla. Jira includes tools allowing migration from competitor Bugzilla.

Jira contains four packages:

1. Jira Core is intended as generic project management
2. Jira Software includes the base software, including agile project management features (previously a separate product: Jira Agile)
3. Jira Service Desk is intended for use by IT or business service desks.
4. Jira Ops is intended as incident management

Jira is written in Java and uses the Pico inversion of control container, Apache OFBiz entity engine, and WebWork 1 technology stack. For remote procedure calls (RPC), Jira supports REST, SOAP, and XML-RPC. Jira integrates with source control programs such as Clearcase, Concurrent Versions System (CVS), Git, Mercurial, Perforce, Subversion, and Team Foundation Server. It ships with various translations including English, French, German, Japanese, and Spanish.

Jira supports the Networked Help Desk API for sharing customer support tickets with other issue tracking systems.

Ref: https://en.wikipedia.org/wiki/Jira_(software)

14. Confluence (software)

Confluence is a collaboration software program developed and published by Australian software company Atlassian. Atlassian wrote Confluence in the Java programming language and first published it in 2004. Confluence Standalone comes with a built-in Tomcat web server and hsql database, and also supports other databases.

The company markets Confluence as enterprise software, licensed as either on-premises software or software as a service running on AWS.

Analysis
The book Social Media Marketing for Dummies in 2007 considered Confluence an "emergent enterprise social software" that was "becoming an established player." Wikis for Dummies described it as "one of the most popular wikis in corporate environments," "easy to set up and use," and "an exception to the rule" that wiki software search capabilities don't work well.

eWeek cited in 2011 such new features in version 4 as the auto-formatting and auto-complete, unified wiki and WYSIWYG, social network notifications and drag and drop integration of multimedia files. Use cases include basic enterprise communication, collaboration workspaces for knowledge exchange, social networking, Personal Information Management and project management. German newspaper Computerwoche from IDG Business Media compares it to Microsoft SharePoint and finds it "a good starting point" as a platform for social business collaboration, while SharePoint is better suited to companies with more structured processes.

Confluence includes set up CSS templates for styles and formatting for all pages, including those imported from Word documents. Built in search allows queries by date, the page’s author, and content type such as graphics.

The tool has add-ons for integration with standard formats, with a flexible programmable API allowing expansion. The software is relevant as an outline tool for requirements that can be linked to tasks in the Jira issue tracker by the same company.

Ref: https://en.wikipedia.org/wiki/Confluence_(software)

15. Agile software development

Agile software development comprises various approaches to software development under which requirements and solutions evolve through the collaborative effort of self-organizing and cross-functional teams and their customer(s)/end user(s). It advocates adaptive planning, evolutionary development, early delivery, and continual improvement, and it encourages rapid and flexible response to change.[further explanation needed]

The term agile (sometimes written Agile) was popularized, in this context, by the Manifesto for Agile Software Development. The values and principles espoused in this manifesto were derived from and underpin a broad range of software development frameworks, including Scrum and Kanban.

While there is much anecdotal evidence that adopting agile practices and values improves the agility of software professionals, teams and organizations, some empirical studies have disputed that evidence.

The Manifesto for Agile Software Development 
Agile software development values
Based on their combined experience of developing software and helping others do that, the seventeen signatories to the manifesto proclaimed that they value:

1. Individuals and Interactions over processes and tools
2. Working Software over comprehensive documentation
3. Customer Collaboration over contract negotiation
4. Responding to Change over following a plan

That is to say, the items on the left are valued more than the items on the right.

As Scott Ambler elucidated:

1. Tools and processes are important, but it is more important to have competent people working together effectively.
2. Good documentation is useful in helping people to understand how the software is built and how to use it, but the main point of development is to create software, not documentation.
3. A contract is important but is no substitute for working closely with customers to discover what they need.
4. A project plan is important, but it must not be too rigid to accommodate changes in technology or the environment, stakeholders' priorities, and people's understanding of the problem and its solution.

Some of the authors formed the Agile Alliance, a non-profit organization that promotes software development according to the manifesto's values and principles. Introducing the manifesto on behalf of the Agile Alliance, Jim Highsmith said,

The Agile movement is not anti-methodology, in fact many of us want to restore credibility to the word methodology. We want to restore a balance. We embrace modeling, but not in order to file some diagram in a dusty corporate repository. We embrace documentation, but not hundreds of pages of never-maintained and rarely-used tomes. We plan, but recognize the limits of planning in a turbulent environment. Those who would brand proponents of XP or SCRUM or any of the other Agile Methodologies as "hackers" are ignorant of both the methodologies and the original definition of the term hacker.

— Jim Highsmith, History: The Agile Manifesto

Agile software development principles
The Manifesto for Agile Software Development is based on twelve principles:

1. Customer satisfaction by early and continuous delivery of valuable software.
2. Welcome changing requirements, even in late development.
3. Deliver working software frequently (weeks rather than months)
4. Close, daily cooperation between business people and developers
5. Projects are built around motivated individuals, who should be trusted
6. Face-to-face conversation is the best form of communication (co-location)
7. Working software is the primary measure of progress
8. Sustainable development, able to maintain a constant pace
9. Continuous attention to technical excellence and good design
10. Simplicity—the art of maximizing the amount of work not done—is essential
11. Best architectures, requirements, and designs emerge from self-organizing teams
12. Regularly, the team reflects on how to become more effective, and adjusts accordingly

Ref: https://en.wikipedia.org/wiki/Agile_software_development

No comments:

Post a Comment