“There is no such thing as freedom without the RISK of failure”

What is a risk? In any field, it is identified as a potential problem. In software development there are many risks that must be assessed. Each project wants to be differentiated in one way or another and this creates certain levels of uncertainty because of factors like technological advancements & quality levels. These risks may compromise the success of a project and it is very important to understand the probability and scope of these risks.
To generate a successful project a project manager must identify, assess, prioritize and manage all of the mayor risks that may be encountered during development.
There is a lot of guesswork involved in risk management and crisis-management must be performed to contain the possible losses caused by the potential problems.
The following tasks must be performed:
• Identify risks and their triggers
• Classify and prioritize all risks
• Craft a plan that links each risk to a mitigation
• Monitor for risk triggers during the project
• Implement the mitigating action if any risk materializes
• Communicate risk status throughout project
There are five main areas in software risk management:
• New, unproven technologies
• User and functional requirements
• Application and system architecture
• Performance
• Organizational
Risk Management in Software Development and Software Engineering Projects

Is there anything more beautiful than crystals?

The Crystal Methodologies are a set of Software engineering methodologies that derive from Agile Sofware Development. The main idea of their creator (Alistair Cockburn) is to meet customer needs and have aligned team goals.
This model focuses on:
-Interaction
-Communication
-Community
-People
-Skills
A main idea of the model is to consider development as a game to generate creativity in all of the participants. There must be communication density, system criticality and project priorization. There are two main assumptions:
1. Teams work together integrating and optimizing.
2. Projects are unique and dynamic and need to be designed based on customer specifications.
These are the types of Crystal Models:
3. Crystal Clear
4. Crystal Yellow
5. Crystal Orange
6. Crystal Orange Web
7. Crystal Red
8. Crystal Maroon
9. Crystal Diamond
10. Crystal Sapphire

Sources:

Four Variants of Agile Development Methods

The Software Development Process

Software Development Processes are the basic models that give us a rough guideline on how to organize all of the work involving the creation of a software product.

All of the methodologies are based on the Software Development Life Cycle.

Paul Downey  Development process
Paul Downey
Development process

Here are some of the main approaches:

WATERFALL ( read a bit more… )
A linear model that follows a sequential flow, work is split into many phases and development happens first in one phase, gets completed and then moves to the next phase, the phases don’t overlap.

This was the first approach invented, it is very straight forward and easy to understand. This process works best for projects that do not change requirements in late stages of development because it is very hard to make changes and implement new features after early stages.

PROTOTYPING
This model focuses on creating protoypes for the client so he/she gets a better idea of how the requirements they gave are being implemented. This is a good model for testing and reduces the misunderstanding gap between developer and client.

Some types of prototyping methodologies are:
-Throwaway Prototyping
-Evolutionary Prototyping
-Incremental Prototyping

Although it is better for user involvement it can also lead to confusion over the protoypes and the final product.

SPIRAL
This method involves combining design and prototyping. This model is used mostly for expensive and complex projects, these project is composed mostly of small waterfall models, the phases go in the same order, and then prototypes are built and simulated.

This model is good for budget estimating and issue discovery at early stages of development, but it also involves a lot of time and high costs and has quite limited re-usability.

AGILE or EXTREME PROGRAMMING (read a bit more… )

OTHERS

-Lightweight Methodologies
-Rapid Application Development
-Code Continue reading "The Software Development Process"

APIs, the new way of life.

APIs or Application Programming Interfaces are the core of our daily lives. We use these interfaces every day for most of the things we do, but… what are they?

APIs basically allow applications to communicate with other applications.

Every time we visit a website or application we leave a digital footprint on them that helps them evolve based on our experience. With the innovation of all digital things, websitesd and applications have evolved to being generated through development software and software as a service platforms.

Data Bases have allowed websites to become applications and have encouraged people to create their own content instead of just viewing it. Site content is now stored on many different databases, some you may own and some you may not and some may be public sources and some may be private.

There are a vast variety of widgets that can be implemented in our phones, computers or other devices to make our lives easier, we rely on them for practically everything.

Soapi1

img11urces:
http://101.apievangelist.com/

Waterfall Method Basics

The Waterfall Model was the first Software Development Process ever created. It is a linear model of the life cycle development model and uses no iterations, this makes it very easy to understand and use. This method requires every phase to be complete before being able to move to the next phase, there can be no overlapping. The success of this model relies on very good planning and documentation.
This model is kind of the opposite of the Agile Model.
The phases:

img10

1. Requirement Gathering & Analysis: Ask the client what their needs and expectations are.
2. System Design: Requirements for the System and Hardware specification to define overall architecture.
3. Implementation: Program is developed in small units and tested (Unit Testing).
4. Integration and Testing: All units are put together and tested for faults and failures.
5. Deployment: After functional and non functional testing, the product is delivered.
6. Maintenance: Regular updates and issue resolving.

This model is called the waterfall method because the each phase cascades into the next one and there is no overlapping.
Advantages: Easy to understand and manage because of how specific each phase is. It allows a lot of control and departmentalization, scheduling and deadlines because of its strict order.
Disadvantages: It allows for very little revision and correction, it is very hard to go back to a previous stage after it has been completed. If documentation is not good it is very hard to maintain the product. This method has high amounts of risk and uncertainty and does not allow for flexible requirements.

Here is a little video on Agile vs Waterfall for better understanding.

Sources:

http://www.tutorialspoint.com/sdlc/sdlc_waterfall_model.htm

The life and tails of the Software Development Life Cycle

Some people think that software development consists of only coding, but it is a way more complex Software development has moved from being a singe programmer doing a project, to very complex projects that require teams of developers to work on the same project and return a valuable product.

This life cycle makes sure that good software is built, every single phase is a complex process that requires a lot of time and work.

There are many types of Software Life Cycles, like agile or the waterfall method, but most of them follow a few basic phases.

img9

1. Requirement Gathering and Analysis:
The clients must provide a set of functional and non-functional requirements for a program, these requirements must contain the business needs and specifications for the project. After gathering the requests, they need to be analysed for validity and possibility to be incorporated into the system, when this is done it becomes a sort of guide to work by and moving to the next phase is optimal.

2. Design:
This phase is centered on the system being planned out based on the requirements that were gathered and analysed during the first phase. During this phase the hardware to be used is defined. The system architecture must be defined and a test strategy needs to be developed to use later on.
Part of the design process is risk analysis.

3. Implementation/Coding:
When the system is designed, then comes the coding & unit testing process. Work should be divided into parts or modules and the code is the the developers main task. This is the longest phase and many enhancements may be needed so developers need to be flexible. The output of this phase is the testing phase input.

4. Testing:
Code must be tested against the requirements to see if Continue reading "The life and tails of the Software Development Life Cycle"

Software Configuration Management Goodies:)

The purpose of Software Configuration Management is to establish and maintain the integrity of the products of the software project throughout the project’s software life cycle. Software Configuration Management involves identifying configuration items for the software project, controlling these configuration items and changes to them, and recording and reporting status and change activity for these configuration items.
img8
The first SCM was used in 1950 and was made by hand on cards or tapes. Now there are a lot of SCM implementations like Plan Change Documentation, Source Safe, Vertical Sky and Git.

PROCESS:

Identification of object in a software configuration
Version control
Change control
Configuration Auditing
Reporting
14182078_703019349845848_2043562261_n

ADVANTAGES

Reduced redundant work
Effective management of simultaneous updates
Avoids configuration-related problems
Facilitates team coordination
Helps in building management; managing tools used in builds
Defect tracking: It ensures that every defect has traceability back to its source
DISADVANTAGES

A file that has changed many times is going to consume a lot of unnecessary space because all the changes are going to be stored.

EXAMPLES:

Git
Trac
Visual Source Safe
Microsoft visual studio 2010
ALM
Harvest
AccurRev
ClearCase
Set-Liber
14151778_10154603056470864_510703679_o

José Manuel Nuño Salazar
José Carlos Peñuelas Armenta
Frida A. Díaz Medina
Ekaterina Chumakova

Non-functional? Not really.

First of all… What are requirements? They are specified conditions that are demanded by clients or stakeholders in the creation of a project.

Functional Requirements:

The logical aspects of a product, system or software are defined as functional requirements. In other words, what does it need to do to function?

Non-Functional Requirements:

nfr-non-functional-cart-before-horse

These requirements are not Non-Functional at all, they focus on quality factors and effectiveness. These factos are what guve value to the software and make the functional requirements function appropriately.
Some non-functional requirements may be:
-Usability
-Availability
-Reliability
-Flexibility
-Supportability
-Performance

Requirements are interchangeable depending on the type of project that must be built. Some software may not be able to limit what functionalities are categorized in which type of requirements.

When a software programmer starts out a project, normally the client has and idea of what functionality they want their software to have, but it is very common to forget about non-functional requirements or as some people call them “Quality Factors”. Both of these are a type of “High-Level” design.
For a product/system both of these type of requirements must match the business requirements of the market.

difference-between-functional-and-non-functional-requirement

Sources:
http://searchsoftwarequality.techtarget.com/answer/Differentiating-between-Functional-and-Nonfunctional-Requirements

http://searchsoftwarequality.techtarget.com/answer/Functional-vs-non-functional-requirements-what-is-the-difference

http://expertbusinessanalyst.com/tag/difference-between-functional-and-nonfunctional-requirements/

To be ethical or not to be ethical, that is the question…

Sometimes we forget that software engineering, as any other profession also has some rules and a code to live & work by. Any professional, free lancer or even a student should implement some basic rules in their work.

PUBLIC

Software engineers should act in a way that benefits public interest.

CLIENT & EMPLOYER

Acting according to the best interest of the client/employer which is according to public interest.

PRODUCT

Always try to meet the best professional standards.

JUDGEMENT

Maintain independent integrity in their projects.

MANAGEMENT

Software development and mantainance should always be managed in an ethical way.

PROFESION

Engineers should always improve the profession in an ethical way.

COLLEAGUES

Software engineers must be fair and collaborative with their peers

SELF

Software engineers must maintaing a constant learning attitude and maintain the ethics in their work.

Agile: eliminating the fear of due-dates.

Agile is a type of project management & team development methodology.

Iterative, work a while, check if stuff works, change what needs to be changed, then start again, otherwise called a sprint.

Opposite of waterfall technique, instead of making one giant blueprint, you revisit the plan many times to make changes.

Time Boxing: work is planed by time, not by features. Time is important, this methodology focuses on delivering projects on time, and implementing all of the possible features we can in that time, opposite to implement all of the features, and not caring if the project is late.

Very collaborative, everyone involved in the project is constantly talking to each other, not working on their own and just presenting what they have done.

img3

Some of the basic things that are implemented are:
Scrum (Self-organizing cross-functional teams.Participants: Team, Scrum Master, Product Owner.)

Extreme Programming (Stressing customer satisfaction).

So basically agile development is based on getting things done in the time they need to be finished, not on implementing eeeeevery single feature a boss may be asking for during a project, without forgetting about quality.

Image Source
Image Source

What is Agile Development (Part 1): What is Agile Development?

Agile and the Seven Deadly Sins of Project Management | Mike Cohn | Better Software West