Assuming you would use an Issue & Project Tracking Software like Jira, for the planning of your next upcoming project.
You decide to use an PHP web framework like Laravel, for the development of web applications following the model–view–controller (MVC) architectural pattern.
You write your issues as user stories, add some details, and so on.
[User specific - Component]
- As a user, I want to be able to manage users.
- As a User, I want to be able to register a new user.
- As a User, I want to be able to delete an existing user.
...
[Message specific - Component]
- As a user, I want to be able to make conversations.
- As a User, I want to be able to send messages to a user.
- As a User, I want to be able to receive messages from a user.
- As a User, I want to be able to use emoticons in a message.
- As a User, I want to be able to attach files to a message.
...
[Task specific - Component]
- As a user, I want to be able to have a task board.
- As a User, I want to be able to add a new task.
- As a User, I want to be able to assign a task to a user.
- As a User, I want to be able mark a task as completed.
...
You get it?! No problem at this point. Some of the stories could even be broken down into smaller stories and later in some tasks, following by some sub-tasks.
Lets go one step further: You use a Source-Code Collaborate Platform like github, combined with Fish-Eye and decided to use smart-commits to transition issues. Your Issues and commits are well-structured and easy to trace. (Beautiful thoughts)
If you follow the guideline in a framework laravel, you would have different tasks to follow up:
This, and even more tasks, have to be completed to confirm a component as done. And by components I mean the defined above, like User, Message, Task. All of them has something in common you would repeat over and over. But still you want the issue to be populated with the source-code that is required to fullfil the issue.
User.php (Model relationships)
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
/**
* Get the message record associated with the user.
*/
public function message()
{
return $this->hasOne('App\Message');
}
/**
* Get the task record associated with the user.
*/
public function task()
{
return $this->hasOne('App\Task');
}
}
Task.php (Model relationships)
use Illuminate\Database\Eloquent\Model;
class Task extends Model
{
/**
* Get the user that relies the task.
*/
public function user()
{
return $this->belongsTo('App\Task');
}
}
Message.php (Model relationships)
use Illuminate\Database\Eloquent\Model;
class Message extends Model
{
/**
* Get the user that relies the message.
*/
public function user()
{
return $this->belongsTo('App\Message');
}
}
The above code is only one part of the required tasks to ensure a component is complete. This would look similar to the other tasks. (db-migration, controller, view, validation, events, ect.)
So how would you take this into account if you planning a project which follows the guideline of a framework?
The goal is to ensure, that a component consists of all the mentioned tasks, before it be can confirmed as complete.
One of the principles of Agile is:
Our highest priority is to satisfy the customer through early and continuous delivery of valuable software.
How you do that is up to the development team. If you find that a PHP web framework helps you to achieve early and continuous delivery of valuable software then that is great.
There is nothing in the Agile approach that dictates the technical methods you should use. The key though, is to focus on delivering value, not building out a lot of technical foundations. It is this that allows you to rapidly adjust to change (be they requirement changes or technical changes).