How to avoid Agile Web Project Pitfalls

More project managers and developers have turned to using Agile project management methods. The benefits associated with this type of project handling have been lauded up to the high heavens, and many have heard - so much so that some may tend to think that using Agile project management methodologies guarantee a failure-safe IT project or programme.
That is not the case, if the people executing it do not make a proper job of using it, the IT projects can still end up as something that you definitely don’t want them to be - unsatisfactory, unsuitable, and unsuccessful.
To help you harness the full potential of Agile project management, the following tips may be able to guide you:
1. Train everybody about Agile project management. If you choose to use Agile to manage your IT projects, make sure that each member of the team is knowledgeable about it.
Though it should come as fairly obvious, many project managers still fail to realise that the project should not start if the team members are not trained in using Agile. Investing time and effort into educating everyone about this system translates into better usage of the system, and better chances at completing projects successfully.
2. Time it well. One of the most common reasons why web projects fail is because the time periods set for the project is inefficient. Project planning has to focus on proper use of time so that the project would be completed well within the project manager’s set period. In addition, project planning has to visualise each task well to guarantee that they would be finished according to the set time.
3. Construct a scope statement. Scope creep can cripple the progress and organisation of the project. Before starting it, the project manager should carefully establish the parameters that the team would cover, and whilst the project is underway, the Scrum master should make sure that the members stick to the scope. Web projects would have a higher chance of succeeding if the scope is followed to the last letter - and if it features no new additions that may disrupt the process.
4. Set your metrics. Another feature that Agile project management lacks is the presence of a cohesive set of metrics that you can use to evaluate the project.
You can work around this by employing a metric system. Having this would enable you to continually check to ensure that your project is going smoothly.
5. Set expectations properly. Agile does not have a very clear set of Best Practices, thus making it hard for team members to rely on established methodologies that they can all use.
To prevent the potential damage that this may trigger, it would be a good idea to compile a list of practices that members have found to be effective, whilst removing those that only provide complications and issues.
6. Success shouldn’t have to exclude learning. Many project managers fail to realise that - sometimes - making mistakes is just another way of learning. Projects fail because team members are too focused on getting it done right that when they don’t, they don’t see that the opportunity of failure should have been a chance at learning.
7. Choose the right leader. A lot of the success of the whole project would depend on the abilities of the project leader to guide the whole team. Many an IT project has ended up unsuccessful because of poor project planning and implementation.
Your chosen ScrumMaster must be exactly that - a master at melding all the essential parts together, ensuring that they work, and following up on those that need help.
8. Everyone should work it. Agile project management focuses on constant communication between all the members of the project, as well as proper task delegation. But, this does not automatically mean that everyone involved would immediately pitch in their parts of the process.
Having a good project management system would be better if the whole team makes an effort to keep up their respective ends of the work, and deliver accordingly.
9. Don’t play hide and seek. Many IT projects do not see their successful fruition because team members and stakeholders can’t stay focused on the project long enough to complete it together. Extracurricular activities that present impediments to the process should be avoided.
Whilst the project has not been completed yet, everybody should be accountable for their duties. Your goals for your IT project can’t be achieved if you’re trying to find each other half the time.
10. Keep the communication lines open. IT projects normally fail because goals have not been clearly relayed and proper understanding has not been established as communication was not handled well. Agile would only work so much if the details of and about the project are clear to every member of the team.
11. Hold retrospective meetings. Retrospective meetings consider three important aspects of the project implementation: what was successful, what was not, and what needed improving for the next sprint.
Agile project management will not be as effective as it can be if the team does not hold retrospective meetings, or fail to understand its essence completely. The success of the project is largely determined by how the team members can learn from each other, and help each other.
12. It’s all in the details. Agile makes it possible for project managers and developers to decompose the whole project into actions and deliverables. But, this has to be done carefully so that the project flow would run smoothly. Project leaders should take the time to examine each project closely so that the project’s decomposition would not trigger later problems and issues for the team and the success of the project.
Source: Ultro digital


Read Users' Comments (0)

Web service: Remove WS-Addressing/WS-Security sections from WSE 3.0 Client request

While invoking web service request using WSE 3.0 client, I was getting null reference exception errors. On investigating code I found bunch of WS-Addressing and WS-Security headers added to my request. The .NET WSE 3.0 package seems to be adding them by default. Is there any way to get rid of these?

The solution I found takes 3 steps:

1.) Create custom ClientOutputFilter
2.) Create a custom Assertion that uses filter from step 1
3.) Bind service to custom Assertion

Step 1: Custom Filter(Called by Custom Assertion)

Class ClientOutputFilter
Inherits SendSecurityFilter
Private parentAssertion As UsernameClientAssertion
Private filterContext As FilterCreationContext

Public Sub New(ByVal parentAssertion As UsernameClientAssertion, ByVal
filterContext As FilterCreationContext)
MyBase.New(parentAssertion.ServiceActor, False,
parentAssertion.ClientActor)
Me.parentAssertion = parentAssertion
Me.filterContext = filterContext
End Sub

Public Overrides Function ProcessMessage(ByVal envelope As
Microsoft.Web.Services3.SoapEnvelope) As
Microsoft.Web.Services3.SoapFilterResult
Dim securityElement As XmlElement = envelope.CreateElement("wsse",
"Security", "http://schemas.xmlsoap.org/ws/2002/07/secext")
Dim mustUnderstandAttribute As XmlAttribute =
envelope.CreateAttribute(envelope.DocumentElement. Prefix, "mustUnderstand",
envelope.DocumentElement.NamespaceURI)
Dim userToken As New UsernameToken(parentAssertion.username,
parentAssertion.password, PasswordOption.SendPlainText)
mustUnderstandAttribute.Value = "true"
securityElement.AppendChild(userToken.GetXml(envel ope))
envelope.CreateHeader.AppendChild(securityElement)
Return SoapFilterResult.Continue
End Function
End Class




Step 2: Custom Assertion

Public Class UsernameClientAssertion
Inherits SecurityPolicyAssertion
Public username As String
Public password As String

Public Sub New(ByVal username As String, ByVal password As String)
Me.username = username
Me.password = password
End Sub

Public Overloads Overrides Function CreateClientOutputFilter(ByVal context
As FilterCreationContext) As SoapFilter
Return New ClientOutputFilter(Me, context)
End Function

Public Overrides Function CreateClientInputFilter(ByVal context As
FilterCreationContext) As SoapFilter
' we don't provide ClientInputFilter
Return Nothing
End Function

Public Overrides Function CreateServiceInputFilter(ByVal context As
FilterCreationContext) As SoapFilter
' we don't provide any processing for web service side
Return Nothing
End Function

Public Overrides Function CreateServiceOutputFilter(ByVal context As
FilterCreationContext) As SoapFilter
' we don't provide any processing for web service side
Return Nothing
End Function
End Class


Step 3: Bind proxy to custom assertion

Private WS As New Service.ServicenameWSE
Private token As UsernameToken = New UsernameToken(USERNAME, PASSWORD,
PasswordOption.SendPlainText)
ProvideUsernameToken.Assertions.Add(New UsernameClientAssertion(USERNAME,
PASSWORD))
WS.SetClientCredential(token)
WS.SetPolicy(ProvideUsernameToken)


Good luck, if anyone has a better way to do this I'm all ears.

Read Users' Comments (0)

How Twitter will change internet search forever

The name alone instantly polarises reactions, but Twitter looks set to have a far greater impact on our lives than anyone could have imagined.

If you haven't heard the phrase already, Real Time Search is likely to become one of the buzz words of 2010. What it refers to is the ability to search for information published on the Internet as it happens and it is something Twitter has perfected as it sought to organise the tens of millions of tweets sent through the service every day. Consequently Twitter users can immediately see what the trending topics (read: hot topics) of the minute/hour/day/week are, read about developments and get involved.




High profile examples of this during 2009 include the breaking news of Michael Jackson's death, the Hudson river plane crash and the Trafigura waste dumping scandal. In fact multiple heavyweight news organisations now scan Twitter on a daily basis for breaking news and trends in public opinion - all of which is pulling traffic away from traditional search engines. After all, why use Google to find what the weather is like in Madrid when a Twitter search can pinpoint a local who made comment on it in the last five minutes and posted a picture?

The keyword in all this is relevancy. The battle for web supremacy lies in the service which can provide the most relevant information to the user and a key aspect of this is speed. So while traditional search engines work by web search crawls which index them into a logical order, the delay can take hours when the goal is seconds. Consequently the Twitter licensing deal will initially see users Tweets integrated into Google and Bing search results (Twitter users have the right to opt out) and the impact of this is profound.

While what Ashton Kutcher or Stephen Fry had for breakfast is unlikely to trouble CNN, it means the on-location reports from (for example) the Hudson River crash would now break through search engines not the BBC or Reuters. Never before has such people power been harnessed. Of course such a system is also open to great abuse, the recent tasteless fad for spreading fake celebrity deaths on Twitter is a prime example, but with this door now open it is extremely unlikely to ever be closed.

Still not convinced? YouTube and Facebook have recently both announced plans to integrate this technology into their respective sites. So that's Microsoft, Google, Facebook, YouTube (Google by proxy) and Twitter all focused on real time search. Resistance is understandable, but in the long run it's futile.

Follow me on www.twitter.com/mujeebhassan

Read Users' Comments (0)

Web services - "The underlying connection was closed.." error

Recently i encountered some errors with web services regarding webService response.

The full Exception that was thown was :
"Server was unable to process request. -> the underlying connection was closed: A connection that was expected to be kept alive was closed by the server"

Digging a little in , i found few reasons that may cause that error.

idle time on the client side is greater than on the server side.
network issues that prevent the Keep-Alive feature from being committed. (firewalls, proxies and so...).

what is this KeepAlive feature : this "great" feature actually keeps the connection between the WebService client and server open for a defined amount of time,thus enhancing WebService interaction performance by eliminating the need to open a new connection each time.

unfortunately, the time for that window is not synchronized between the client and the server. this situation creates a problem, on which the client may think that the connection is still open, but the server closed it.

so, what can be done so solve that matter ?

ensure the reasons above would not happen disable the KeepAlive feature.
since, ensuring that our time is not greater than the one on the server side is impossible when dealing with 3rd party services, not even mentioning the 3rd party network configuration, the optimal solution for this issue will be disabling the Keep-Alive feature.

how can we do that ?

when adding a web reference with visual studio 2005, it automatically generates a file called reference.cs which is used as a proxy to the web service on the server.
this is the place which we should do the "fix".

there are 2 ways to prevent this certain problem from happening :

set the KeepAlive property to false
use the HTTP protocol version 1.0 (difference between http 1.0 and 1.1)

since our "proxy" is being generated each time we update our web reference, we would not want the change to be made in the reference.cs file, since it can be overridden the next time we will do "update web reference"

what we can do, is use the "partial class" feature that presented in .Net 2.0 framework to solve this issue.

namespace theNamespaceOfYourServiceAsStatedInTheReferenceFile
{
public partial class MyService
{
///




/// this method overides the base getWebRequest,
/// thus preventing the KeepAlive feature
///

/// the given uri
/// the needed web request with the disabled keep alive feature
protected override System.Net.WebRequest GetWebRequest(Uri uri)
{
// Do the base class operation and obtain the specific web request
System.Net.HttpWebRequest webRequest = (System.Net.HttpWebRequest)base.GetWebRequest(uri);

// do the keep alive handling
return Utils.DisableKeepAlive(webRequest);
}
}


now we need to decide how we are going the disable it(write the DisableKeepAlive in our utils)

///



/// This method should disable the keep alive feature
///

/// the needed HttpWebRequest
/// Disabled HttpWebRequest
public static HttpWebRequest DisableKeepAlive(HttpWebRequest w)
{
// Set the keep-Alive to false, thus for not using it
w.KeepAlive = false;


// the second way
w.ProtocolVersion = System.Net.HttpVersion.Version10;

return w;
}


Thats it, now we have successfully disabled the KeepAlive feature

Read Users' Comments (0)

The Scrum Framework

Scrum is an agile framework for completing complex projects. Scrum originally was formalized for software development projects, but works well for any complex, innovative scope of work. The possibilities are endless. The Scrum framework is deceptively simple.




  • A product owner creates a prioritized wish list called a product backlog.
  • During sprint planning, the team pulls a small chunk from the top of that wishlist, a sprint backlog, and decides how to implement those pieces.
  • The team has a certain amount of time, a sprint, to complete its work - usually two to four weeks - but meets each day to assess its progress (daily scrum).
  • Along the way, the ScrumMaster keeps the team focused on its goal.
  • At the end of the sprint, the work should be potentially shippable, as in ready to hand to a customer, put on a store shelf, or show to a stakeholder.
  • The sprint ends with a sprint review and retrospective.
  • As the next sprint begins, the team chooses another chunk of the product backlog and begins working again.

The cycle repeats until enough items in the product backlog have been completed, the budget is depleted, or a deadline arrives. Which of these milestones marks the end of the work is entirely specific to the project. No matter which impetus stops work, Scrum ensures that the most valuable work has been completed when the project ends.
Source: ScrumAlliance

Read Users' Comments (0)