Sunday, January 11, 2015

What is "Scrum"?

Scrum is currently (2014) the most widely used framework to manage software projects (see Wikipedia: Scrum).

Since Scrum is so popular you will find many slightly varying implementations of Scrum in the real world. In this answer I try to present what I consider to be the most common implementation.

Why did Scrum become so popular?

At its core Scrum is based on an iterative feedback loop and time-boxed sprints (periods of planning & value creation).

Software development is very complex, it is extremely hard if not impossible to know how an ideal solution to a problem would look like upfront. On top of that what's "ideal" tends to change over time.

Therefore choosing an iterative approach to developing software to leverage information and insight gained on the fly is very pragmatic. It is also used in other disciplines with similar constraints (highly competitive, changing environment) like military reconnaissance (See Wikipedia: OODA loop).

On top of that most of the software that is written today is never 'finished'. This is especially true for successful software. It is rather improved and maintained for extended periods of time (think decades).

Scrum is a better fit for the way we think of software today than other (more sequential) methodologies that came before Scrum (See Wikipedia: Waterfall model).

What are Scrum Sprints?

Scrum sprints are time-boxed periods where the software development team works on a set of items that need to be completed. A typical sprint length used to be about 2 months. Nowadays the common sprint lengths are usually around 1-2 weeks, trending to even shorter cycles.

Shorter sprint time-boxes make a lot of sense from a business point of view. They enable faster delivery & adaption to what's going on in your market.

What is Scrum Sprint planning?

At the beginning of every sprint you plan which items (stories) should be worked on for the upcoming "sprint" time-box. Teams will then use estimates (based on complexity or expected time-to-completion) and the team performance of previous sprints (velocity).

So for example if you know that during the previous 2-week sprints you were able to deliver about 4 'medium'-complexity items (stories) then you can take this (velocity) as your ballpark for how many items you take on in the upcoming sprint.

There are various ways to come up with a sprint velocity for your team. One common method is to 'size' items (stories) like t-shirts with a weighed complexity based on the fibonacci sequence. For example:

  • S (small) = 2 complexity
  • M (medium) = 3 complexity
  • L (large) = 5 complexity (might make sense to break up)
  • XL (extra large) = 8 complexity (might make sense to break up)

What are Scrum Stand-Up Meetings?

A daily meeting where everyone in the team updates each other on what happened yesterday, what's up for today and whether there are any blockers. 

These meetings usually are kept very short (around 15 minutes) and used to start the day.

What is a Scrum Sprint Retrospective?

The team reviews the work that got done during the sprint time-box and also examines the work that did not get finished. This is also the time to reflect on how to improve the overall software development process or tooling.

What is a Scrum Backlog?

The Scrum backlog is list of requirements that can range from ideas, features, bugs, higher level items as well as very granular quick fixes. Items in the Scrum backlog get estimated and ordered regularly.

The Scrum Backlog is the source of work items that will get considered for the next time-box in Sprint plannings.

Is there something better than Scrum?


Yes there is.

In fact I personally believe that Scrum's time-boxes and concept of a backlog of requirements are limiting in a world where we strive to achieve ever faster release cycles.

I believe if we want to develop software as effectively & efficiently as possible it is about time to move away from Scrum. Pull-based systems optimized for continuous delivery are the logical next step for managing software projects.

Here is a post about the disadvantages of Scrum and what we can do about them: The Dark Side of Scrum

--Source : quora.com

Agile Software Development

A software development methodology is a way of organizing and managing the development of a piece of software. The agile development methodologies are a group of loosely-related methodologies with some common ideas:

1. Close interaction between the development team with a "customer". They may be another employee such as a product manager, rather than a real paying customer. The customer takes responsibility for deciding what the software should do, and how important particular features are. 

2. The development team is accountable for saying how long things will take, and therefore what features the customer should expect and when. The intent is to be able to have a productive negotiation, rather a battle of organizational power, over feature delivery schedules, by making it clear where authority over priorities lies, and where authority over estimates lies. 

3. Short development cycles, and frequent releases. This means the customer gets to see the software regularly, and the development team can monitor progress while the events are still fresh in their minds. Week long development cycles and daily releases are both common. 

4. Respond fast to feedback and new information. Whenever the customer sees the software, and whenever the development team works on the customer's requests, you will learn things about what the customer wants and what the technology can do. In every development cycle, you should document any new features and/or bugs than come out of this process and have the customer prioritize them, and the development team score them for difficulty so they can be done in the next cycle.

5. Planning and design are de-emphasized. There is no planning beyond deciding what will be done in the next cycle, and little or no documentation of the software "design" beyond the code. 

The general idea here is to trust the development team to develop software, and the customer to know what would be useful to them, and stop trying to second guess one another, and to embrace the fact that its very hard to anticipate what requirements and what technical obstacles are going to come up and which will be important. In general it appears to work within those parameters - agile teams do better keeping up with changing requirements and deliver features people want with greater predictability. 

The main issues that come up with agile methodologies are:

1. Customer frustration. Its very hard for the customer to plan around the results of an agile development process and they have very little information about what will be delivered and when. When the customer is in a business with hard deadlines, such as manufacturing, this can be a signfiicant problem.

2. It makes you stupid. Well, not really, but it encourages development teams to ignore the results of analysis in favour of empirical results. While that can be useful discipiline, it also means you can end up implementing things that will never work in reality, because that's all thats needed for the current development cycle. Similarly, the lack of design can mean a failure to think properly about algorithms and data structures.

3. Developer centric. Other functions in product organizations can have a very hard time with agile development teams. eg. Documentation need a finished product to document, testing may take a long time. The whole organizational structure needs to be made agile, and this is not something that has been properly thought through in some literature on the subject - agile methodologies often come from consultancy environments where you can ignore these factors

Also see "What is scrum?"

Wednesday, January 7, 2015

Code faster with lesser bugs!

Three programmers were asked to cross a field and go to the house at the other side. 
The novice programmer looks at the short distance and says, "it's not far!. That will take me ten minutes" 
The senior programmer looks at the field, thinks for a while and says "I should be able to get there in a day". The novice looks surprised. 
The ninja programmer looks at the field and says. "Looks like ten minutes, but I think fifteen should be enough". The senior programmer sneers. 
The novice programmer sets off, but within a few moments, explosive land mines go off, blasting huge holes. Taking him off course, and requiring him to double back and attempt the crossing many times. It takes him two days to reach the goal. Although he is shaking and injured when he arrives. 
The senior programmer sets off on all fours. And carefully taps the ground searching for mines, proceeding only when it is safe. Slowly and meticulously he crosses the field over the course of the day. Only setting-off a couple of mines. 
The ninja programmer sets off, and walks directly across the field. Purposefully and directly. He arrives at the other side in just ten minutes. 
"How did you do it"?, the others ask. "How come the mines didn't get you?" 
"Easy" he replies. "I didn't plant any mines in the first place".

---

P
rogramming gets tough when we encounter logic bombs which we (or others) have planted for ourselves. We write logic bombs all the time.
And they sit there, beneath the surface, waiting to go off. Often with vast and unpredictable consequences.

With each new module of code added to a project, the project complexity goes up. Not in a linear level but by some exponential function.

The programmers mind is a limited resource, so this exploding level of complexity eventually overwhelms the programmer. At some point it becomes too much to hold in your head. That's the turning point.

That's when the bombs start to go off. The gotcha about not modifying the array while iterating goes off. Then the bomb where the array index is occasionally negative. And there's the one where the second thread can actually change the state of the object between the point where you enter the function and the point at the end. Boom, Boom, Boom.

I think the fastest, most, reliable programming is about developing a style where you avoid this class of problem.

Write code which clearly describes what it does. Select meaningful symbol names which are precise and unambiguous. Be very precise with naming schemes, don't use different words to describe the same stuff.

Adopt the simplest solutions if they are available. Do not optimise for speed. Do optimise for readability and transparency.

Don't fool yourself into thinking your code is magically reusable, if you didn't originally write it with reusability in mind. Instead, start with single use code, and keep it inline. If it makes sense to generalise it, then be prepared to re-write it completely.


--Reference from quora.com

Saturday, October 18, 2014

Jay Vora: CSE Labworks

dats a grt initiative!... spread this  no student should suffer in submission season 



Jay Vora: CSE Labworks: On this page find the links below! Here you'll find almost every subject labwork of Computer Science and Engineering B.E Course . ...



And Finally a vacation of 20dayz....! C u all guyz later!!



Happy Diwali and a very prosperous New Year!




Wednesday, October 1, 2014

Software Development : A tool for business and earning

Every enterprise , from start-ups to medium scale and mega enterprises, requires a software for their daily administration and maintenance. Daily there are infinite needs arising of application and softwares in the market and projects are open for being developed. With the processes of software development, a job is connected. Say for testing phase - Testers are hired, programming - Programmer or Application Developer, requirement analysis - System Engineers etc. Here we can picture that for an ideal project, a medium scale, incurs a good hefty cost for it's implementation.

The enterprises makes the requirement of the project and gives it to the company or a freelancer to develop it. Freelancers are the persons with skills and experience to develop projects and programs. The Software Development company may hire or have their software development team, who can develop the project.

The current Scenarios states that most of the companies developing and providing most attractive salaries to software developers are : Switzerland ($104,200), Norway ($81,400) United States ($76,000) Denmark ($71,500) , Israel($70,700) , Australia ($65,900) , Germany ($63,800) , Sweden ($61,400) , NewZealand ($59,600) and Canada ($57,500) -- The toppers in the salary packages. 

Many of the organizations pass their projects to the other countries Industries and leading to the development of those companies and countries with flow of money there. This flow hampers the growth of that country, as they offer money for services and product.

With survey of 2011 India ranks 34th in the IT-Sector internationally. This indicates that there are many companies that get offers of developing software than India. Noticing their economies overall we could easily figure out how much IT-Sector have contributed to their growth.

Being in the Computer Science or Information Technology field, every Indian Professionals should be aware about this aspects. They can contribute immensely to the development of nation with their contribution. Many Professionals in CS/IT fields go abroad for better prospects which inturn makes the resources of that companies more powerful and strong while at the same time depleting the country's resources.

The college and the educational institutions must also devote to the development of talents in the student's during the graduation and make them well-equipped with all the skills that are required in the industry. Each CS/IT institute and Engineering Colleges, all small and large scale coaching classes must have the aim of generating the resource to the country in form of Engineers and Programmers. With these responsibility on the educational organization, each CS/IT student must also be equally aware and must develop himself, make efforts to reach best, most efficient and competitive  skills in respective branch and field of interest. Every inspired person must spread this fire of inspiration and make a IT-Revolution a great success. This will be in well-being of the self and nation. 

Each inspired one - Teach one. This can only start from HOME. With us, SHARE! Jai Hind!

Sunday, August 18, 2013

Introduction!

On this blog...

- The block is dedicated for the aspiring Software Developers who are just about to begin and start learning Software Development...

- What will u find on this blog?
This Blog contains the assembled information regarding the process of Software Development... How can a Novice start.. What are the scopes and further ... Addressing questions and queries... :)

.... :) Enjoy the Blog :)....