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:
- Database (with relationships)
- Model (with relationships)
- Controler
- Routes (API)
- Views (UI)
- Validations
- Events
- Validations
- Errors / Exceptions / Logging
- ...
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.