Sunday, September 11, 2011

How Czech PHP Programmers Develop Web Applications

I was on the PHP unconference this weekend and I had offered this topic. Without a big surprise it wasn't scheduled, but thank you to all of you, who voted for this topic and not only for you there is a brief overview of what I wanted to talk about.


Intrudoction
The Czech Republic is a small country, but there is a lot of interesting things what czech programmers and webdesign community do. Get inspired by frameworks, (not)ORMs and tools they use.


Survey
There was a survey on the most known online magazin in the webdevelopment community few months ago. I wanted to go through this article, but you can simply use google translator and you will probably understand most of it, or you can go through data overview in google docs (Raw data are linked in the article). Btw. do you know that NetBeans are made in the Czech Republic?

Then I wanted to show you some examples of "PHP software made in the Czech Republic"
 

Our (un)conferences
I want to invite you to http://webexpo.net/prague2011/ next week (speakers/development) or czech barcamps (one is in Brno in October).

Tuesday, September 6, 2011

How I was evaluating a tender

If you have read my previous article, you know that I have used a questioner for 1st round of the tender. In this post I'll try to explain you how I was evaluating it.
Cube in orange stock photo by www.pixmac.com
Project overview
I have described our project as a project which should be developed in next months for some thousands of € and than maintained (including developing new features) for next 5 years for some hundreds of € each month. So we are looking for some longterm relationship.


Tender attendants
I use 2 sources for attendants 1st was published project on the Elance. On Elance have answered me 16 companies, but 5 of them didn't respect our very basic criteria (which was in project description). It was that we want to have only companies which are located in GMT+1 (+- 2 hours). I sent them the questioner and 7 of them fill the questioner. Most of them were from East Europe.

2nd source were companies which I know from Czech Republic and think/know that they are good or I found them on Google and their website provide information that they are high probably a good contractor. I have sent 9 mails, and 8 (one company forward the tender invitation to partner company, because they didn't have time for this job) fill the questioner.

There was one more company which is developing prototype of the service, but we aren't sure if it's good company to develop and maintain our service.

Evaluation
I have used the decision matrix technique and I extend it with weight. Firstly I set up the criteria for evaluation. Company was able to gain from 0 to 100 points for every answer. Than I set up the minimum number of points for every answer (must-have). After that I evaluate each questioner response according to this criteria.

You can download the file which includes both (without company names, of course) in xlsx or see in Google docs (not as pretty as xlsx ;o)). Criteria are in the second sheet "settings".

I need to say, that it was my framework for doing this tender. Next time I'll probably change some of these criteria. I don't want to comment every criteria, but I'll quickly mention points which were interesting for me.

Basic information
For example I was surprised that most of companies hasn't any plan for illnesses or if somebody of the team will leave the company. It seems that they are waiting and they will solve it somehow. Only few of them mentioned what exactly they use to deal with it. Or only one company mentioned that it has some pricing method for maintaining and adding new features.

Code quality
Only few of companies was able to explain why they are using the frameworks which they have mentioned in the previous question. Sometimes they only try to describe how it is ease to work with them. In worse case how they needed to rewrite the framework they use. Btw. do you know why a lot of professional companies use SVN today? I remember how it was complicated to work together until we switch to GIT...

Development process
I was looking forward to see how they deal with deadlines and changes in specifications. Unfortunately no surprise. Only two companies mentioned that they are using agile techniques and in many other explanation there were things that showed that they are not using agile even they have wrote it in previous answer. Unfortunately nobody is using Feature driven development which I would like to see in practice.

Final decision
Who should we invite to the 2nd round? That was the question. I don't want to waste time of people in many companies just for our tender if I know that there is only minimum chance that we will choose them. And finally I don't want to compare 16 complex offers. So I decided not to only choose companies which meets our basic criteria, but pick only few (5) of them which have the highest number of weight score.

PS: As I have promised, the questioner is now public for use.

Tuesday, August 30, 2011

Feature Driven Development

I don't understand why Feature Driven Development is not as known as other agile methods. Maybe it's because there are not so visible things like 2 programmers siting behind 1PC (extreme programming), people standing while short meetings (SCRUM)...


It's based on small pieces of final product with real additional value for customer  which are called features. There are 5 basic activities. During the first three of them (Develop Overall Model, Build Feature List and Plan by Feature) you establish an overall model shape. And the rest (Design By Feature and Build by Feature) are repeated for every feature. There is a nice process model diagram for this activities.

Feature-Driven Development is built around a core set of industry-recognized best practices. Part of Wikipedia article follow:
  1. Domain Object Modeling. Domain Object Modeling consists of exploring and explaining the domain of the problem to be solved. The resulting domain object model provides an overall framework in which to add features.
  2. Developing by Feature. Any function that is too complex to be implemented within two weeks is further decomposed into smaller functions until each sub-problem is small enough to be called a feature. This makes it easier to deliver correct functions and to extend or modify the system.
  3. Individual Class (Code) Ownership. Individual class ownership means that distinct pieces or grouping of code are assigned to a single owner. The owner is responsible for the consistency, performance, and conceptual integrity of the class.
  4. Feature Teams. A feature team is a small, dynamically formed team that develops a small activity. By doing so, multiple minds are always applied to each design decision and also multiple design options are always evaluated before one is chosen.
  5. Inspections. Inspections are carried out to ensure good quality design and code, primarily by detection of defects.
  6. Configuration Management. Configuration management helps with identifying the source code for all features that have been completed to date and to maintain a history of changes to classes as feature teams enhance them.
  7. Regular Builds. Regular builds ensure there is always an up to date system that can be demonstrated to the client and helps highlighting integration errors of source code for the features early.
  8. Visibility of progress and results. By frequent, appropriate, and accurate progress reporting at all levels inside and outside the project, based on completed work, managers are helped at steering a project correctly.
For me is it very well combined "old" (model-centered) and "new" (agile) concept of development process for middle-sized projects, but I haven't try it for any project yet.

I have a few question:
  1. Do you know FDD?
  2. Do you use FDD?
  3. What do you thing about?
  4. Which software do you use for support FDD?
Resources:
  1. Feature-drive development (Wikipedia, EN)
  2. http://www.featuredrivendevelopment.com/ (Community, EN)
  3. Feature driven development (Chapter 6 of book Java Modeling in Color with UML, EN)
  4. Feature-driven development and the ‘5 Ds of Done’ (Edward Kay, EN)
  5. Metodika feature-driven development neopouští modelování a procesy... (PDF, Alena Buchalcevová, CZ)
  6. Metoda FDD (překlad Jiří Sochor, CZ)

Thursday, August 18, 2011

How to find a reliable PHP development company?

I have a task - to prepare tender for contractor to our next project. We need a reliable company which works with PHP & MySQL & JavaScript. It's not so small project and we plan to maintain and add feature every month. So it's quit big deal if you see the long term. So I was thinking how to choose a good company for our project. And I have an Idea which I want to discuss with you.

Cube in orange stock photo by www.pixmac.com

I want to split the tender to 2 rounds:
  1. In the first I want to collect basic information through questioner about potential contractors and test communication with them. 
  2. In the second I want to invite selected companies from the first round and if they sign the NDA we'll send them a part of documentation and wait for comments and eventually the offers.
What do you think should be in in the questioner? I have tried to design a template for it, so we can improve it and than I can submit in to free templates to google docs. So here it is in Google docs:
As you see I have split it to 3 steps (actually 4 including the "Thank you step"). In the first I'm trying to get the basic information about company. In the second how they manage their source code and finally in the third how they work.

What's your comments to this questioner?

PS: If you want to compete in our tender send me mail please.

What should manager know?

While I was reading The Goal (E. M. Goldratt) I was thinking what should excellent manager do. The book didn't serve me the answer, but there were three core things what should every manager know:


Arrow & Young Businessman Lying in the Park stock photo by www.pixmac.com

  • What to change.
  • What to change to.
  • How to cause the change.
And what do you think?