Archive for the ‘Tips & Hints’ Category

[tweetmeme  source=”aabdulmoniem” only_single=false]

Today, our product owner has sent me a document which contains some bugs as he said. I have opened the document to see what are the problems with our system, but I have found that most of the notes which were named bugs simply not bugs but they are new features.

I have decided to hold a meeting with him afternoon to discuss him about those notes. I told him: “These are not bugs, they are new features.”. He said sadly: “No, No … They are bugs. I didn’t expect all these notes. Why this feature is like this? and why the other feature is not working as my expectations … etc.”

The problem I am facing here is just we are not meeting his expectations, and the cause is very obvious, he didn’t write his expectations about each feature. In other words, he didn’t write acceptance criteria for each user story (Scrum is our process).

Rule of thumb:

Always, ask your stakeholders about their acceptance criteria before going to code.

Let’s take an example from Software Estimation book by Steve McConnell to see what I am talking about here:

Suppose you’re developing an order-entry system and you haven’t yet pinned down the requirements for entering telephone numbers. If I didn’t ask the product owner about what he is expecting while entering telephone numbers, I may implement it in another way which will not meet his expectation. Some questions may be:

  • When telephone numbers are entered, will the customer want a Telephone Number Checker to check whether the numbers are valid?
  • If the customer wants the Telephone Number Checker, will the customer want the cheap or expensive version of the Telephone Number Checker? (There are typically 2-hour, 2-day, and 2-week versions of any particular feature—for example, U.S.-only versus international phone numbers.)
  • If you implement the cheap version of the Telephone Number Checker, will the customer later want the expensive version after all?
  • Can you use an off-the-shelf Telephone Number Checker, or are there design constraints that require you to develop your own?
  • How will the Telephone Number Checker be designed? (Typically there is at least a factor of 10 difference in design complexity among different designs for the same feature.)
  • How long will it take to code the Telephone Number Checker? (There can be a factor of 10 difference—or more—in the time that different developers need to code the same feature.)
  • Do the Telephone Number Checker and the Address Checker interact? How long will it take to integrate the Telephone Number Checker and the Address Checker?
  • What will the quality level of the Telephone Number Checker be? (Depending on the care taken during implementation, there can be a factor of 10 difference in the number of defects contained in the original implementation.)
  • How long will it take to debug and correct mistakes made in the implementation of the Telephone Number Checker? (Individual performance among different programmers with the same level of experience varies by at least a factor of 10 in debugging and correcting the same problems.)

As we can see, some questions like this will give us more explanations about what he wants? and the first dialogue will not happen again if we meet what he looks for.

A really good lesson you have to learn and to teach.


Read Full Post »

[tweetmeme  source=”aabdulmoniem” only_single=false]

Hello … It has been a long time from my last post. I am sorry for that delay (I know I am the only one who reads this :D).

Really, I am here today just to describe my feelings about the last three months being a team lead. May be it is not the first time for me to lead some people but it is the first time actually I am titled as a team lead. And for sure it is a BIG difference.

Being a normal senior leading some people under your management is totally different from being a team lead leading a whole team has seniors, juniors and even people who are out of your technical scope. And this makes the difference.

Do you think it is easy?! .. Really not!

In the past three months, I have realized really how to practice your mentality to be a multi-task enabled. You will meet situations that you have to lead people, write code, give advises, recommend solutions, architect software, be a Scrum master (if you are familiar with scrum), talk to managers, hold meetings, solve problems between team members, giving them positive boost, taking aggressive actions sometimes …. There is no more space to write all the tasks you have to do at the same time when you become a team lead.

I will document here some notes I think they will be useful for someone else reading this topic (if any) and he is going to change his career soon to be a team lead.

First, read on how to lead people in general and how to give them the right benefits and help they are needing from you. This is a  whole big different science and don’t try just to behave like a leader in your first day without gathering some information about your new position. A right choice for you may be “Peopleware” book.

Second, from your first day in your new position you have to give your team the impression of how you’re a good team leader, set with them in a small session giving them some highlights about your career path, achievements, and success stories. Also, give them the ability to tell you the same about their career lives. It is important to make your team as a one unit, loving each other, and respecting each other, and knowing each other.

Third, setup the process guidelines. You have to set the red and green lines which makes your work succeed with your team. You have to name the process on which your team will work together. Explain it very well, give examples about some situations you have seen in your career life, and at the same time tell your team members how they must be accountable and responsible while they are working because the team has the same vision so they must feel like they are making the job together to reach some targets.

Fourth, you have to tell your team that the small tasks must be done perfectly for the sake of the big success. Because if the small tasks have been done perfectly, it makes a difference. So, your team members must feel how they are participating in success or failure. Success and failure will not be be attributed to a specific one, but to the team.

Fifth, one of the biggest problems I have faced in my first days being a team lead is that some members have no intention to cooperate with others to make the team reaches the targets. The problem was that not all the team members know well how to be a good team player. Teach and direct your team members to be a good team players. Make some sessions about this issue every some time. It is really a big if not the biggest reason for your team success.

hmm … I think, this is enough for today but certainly I will return back. I will be really happy to hear from all the team leads our there about their first moments being team leads ;).

Read Full Post »

[tweetmeme source=”aabdulmoniem” only_single=false]

We are the developers always need a good tool to test our regular expressions and to make sure that they are correct.

Today, I am coming to you with a very handy and easy tool to test your regular expressions online.

You can test it from here.

I have received many replies which indicates some other tools.

Library for common regular expressions from here and contains a tester.

Also, another tool completely written by JS from here (Thanks to Kenley Capps)

Read Full Post »

[tweetmeme source=”aabdulmoniem” only_single=false]

A very annoying accident is to format your hard drive with all your favorites or bookmarks. I am sure that this had happened to you someday.

And a very annoying situation, when you urgently need to access a bookmark that you have recently saved in your home PC from another one. Nah! Going everywhere with your bookmarks on your flash memory is a bad behavior and it is the best example on concurrency problems!

I am today, coming to you, with a very tiny hint, but a very useful one.

Using Google Bookmarks, you can access your bookmarks anywhere. Out there, there are many bookmarks services which I have never tried but I prefer Google Bookmarks because it is tightly coupled with your Gmail account which is a very +ve point. No need for extra accounts, usernames to remember, or passwords to save. It is only your Gmail account which you are using daily (if you use Gmail).

How it works?

You can access Google bookmarks with many ways but I prefer one of them mostly. Although this, I will try to mention the different ways to do that.

1 – Using your browser:

  • Go to this address.
  • Log in using your Gmail account.
  • Viola! you are in. You can now add new bookmarks, save them, categorize them using labels, or make lists and share them with your friends (nice new feature)!  WOW!

2 – Using Google Toolbar:

  • Just install Google Toolbar from here. It will install the right version for your browser [IE and FF is supported]. (Chrome is not supported as far as I know, so use the first approach).
  • Open your browser, you will find a new toolbar appeared with an icon on the right hand (Sign in). Just click on it and sign in using your Gmail account.



  • And here is the magic begins, you will see a button on the toolbar names “Bookmarks” beside a star. If you are visiting a page and you decide that it deserves to be on your bookmarks just click on the star. That’s it! Your page has been bookmarked! WOW!


  • Using the Bookmarks button (it is a mini menu in fact), you can go to your bookmarks just like the first approach, you can organize bookmarks on the fly, and you can browse them just from your browser.

Really, helpful and save you from the pain of accident formatting or boundaries limit.

I will let you discover the many features of Google Bookmarks and to enjoy the experience of using it. Happy bookmarking :).

Read Full Post »

[tweetmeme source=”aabdulmoniem” only_single=false]

Here are the most amazing posters I have ever seen.

  1. .NET Framework 2.0 Poster.
  2. .NET Framework 3.5 Poster.
  3. .NET Framework 3.5 SP1 and .NET Framework 4.0 Poster.

Enjoy the posters!

.NET 2.0 Poster

.NET 2.0 Poster

.NET 3.5 Poster

.NET 3.5 SP1 + .NET 4.0 Poster

Read Full Post »

[tweetmeme source=”aabdulmoniem” only_single=false]

I ran into a problem today when I tried to convert a png image file to an ico file. Really, I was trying to make a simple icon to my new packaged setup for one of my applications.

Usually, I am using a software to convert images to icons, but usually also, I uninstall these kinds of software from my machine as soon as I finished my conversion task. Then when I need them again I will search for them from the web and then reinstall it and so on.

Besides, many of these kinds of software are trials and seems to me like a trojans or some kind of crap!

Today, I am coming to you with a free simple web tool to convert your png files to ico files only with one click from here.

All you need is to upload your png file or refer to it from the web and click, and viola, your ico file is ready to be downloaded.

Read Full Post »

[tweetmeme source=”aabdulmoniem” only_single=false]

Today, I am coming with a new useful tool which helps you do the following:

  • Save keystrokes and time
  • Simplify documenting your code
  • Benefit of the base class documentation

It is the GhostDoc:

GhostDoc is a free Visual Studio extension that automatically generates XML documentation comments for methods and properties based on their type, parameters, name, and other contextual information.

How you can use it?

  • For C#:

C# GhostDoc

  • For VB.NET:

VB.NET GhostDoc

Also, you can use GhostDoc using the GUI by right clicking any method or class that you want to document and just choose “Document this” which will generate all the proper XML documentation for you.

Document This - GhostDoc


  • Generates XML comments based on code element type, parameters, name, and other contextual information.
  • For a derived class uses the base class documentation.
  • Assignable shortcut (default Ctrl-Shift-D)
  • Configurable rules, acronyms and macros
  • Import/Export of the configuration and the rules
  • Option to re-build documentation

It is now available for the following IDEs:

  • Visual Studio 2010 RC
  • Visual Studio 2008
  • Visual Studio 2005

Read Full Post »

%d bloggers like this: