Povilas Korop: Laravel for Clients

https://laravelforclients.com/?utm_source=laraveltutorials-facebook

 

What is Laravel? Why Laravel?
Why should I care?
As business clients, you probably think you shouldn’t care about technical stuff after
all, it’s
a job of developers. But in fact, some technical knowledge is really powerful.
Current webdevelopment
world is full or “random” keywords and technologies, it’s so easy
to get lost and give up on it. Don’t worry, I will try to translate it all to you in a nontechnical
manner.
That’s, actually, one of the main possible advantages of a webdeveloper
or agency to
be
able to describe things to the client in their language, so that both sides would be on the
same page about the project and terms.
Some technical knowledge not only helps you to run the project smoother and understand
technical guys better , but you will be also able to choose your developers more wisely.
By understanding what is Laravel, and other terms mentioned in this chapter/ebook,
you will
potentially finish your project quicker and with lower budget , cause your decisions will
be more effective based
on actual knowledge and understanding, and not just because
someone said something.
Also you will be able to formulate the tasks in a better way and prepare a better brief for the
future projects.
What is a frontend,
backend
and fullstack
development?
Every webproject
consists of two main parts:
Invisible
“backend”
logic which defines how project WORKS ;
Visible
“frontend”
code which defines how project LOOKS .
That’s the basic difference, although it’s getting merged quite a lot backend
functionality is
moving to frontend
“effects”, but let’s not get too complicated here.
Essentially, there are backend
and frontend
programming languages/technologies.
Backend
languages can be: PHP, Ruby, Python, Java etc.
Basically, you choose main one for the project.
Frontend
is a little more complicated in terms of languages:
There’s
HTML , which is basic markup language for website layout it’s
not even
programming;
Then
there’s CSS a
language for styling different website elements colors,
sizes,
fonts, spacing etc. Also not really a programming, more like styling;
And
then there’s JavaScript where
real frontend
programming lies. Here you take
care of all the dynamic effects on the website. A basic example is for a button to
change some other text or element without reloading the whole page. But it gets
much more complicated than that.
Beside languages, inside of most of them there can be different frameworks or additional
sublanguages
we’ll
talk about them a little later. But again, let’s not dive to deep here it’s
enough to know the basic difference between backend
and frontend.
Although all of that is programming and code writing, it requires a little different mindset and
skills backend
development is more about logic, and frontend
is about visual stuff.
Therefore usually it’s two different developers, two people .
Alternatively, there are suchcalled
“fullstack”
developers who can do both. Or claim they
can. In my experience, these people are still more qualified in one or the other they
are
backenders
with “good enough” knowledge about frontend,
or vice versa. So be careful
with assigning the whole website to one person that
attempt to potentially save money
might turn into saving on quality. See here:
https://medium.com/swlh/thefullstackdeveloperisamyth4e3fb9c25867#.
upgo5zk0l
What is a framework?
You probably understand the concept of a programming language let’s
call it “a set of
syntax rules to write code”. Languages are PHP,
Ruby, Python, Java, C++ etc.
At some point of programming evolution, developers saw some repeating code appearing
over and over again. Then they tried to package the repeating parts in various ways set
of
classes, snippets, packages, and then it emerged into frameworks .
Basically, a framework is a set of prewritten
functionality on top of programming language to
avoid reinventing the wheel and creating some functionality every time for every new
project.
For example, login/logout functionality for websites, folder structure of the project, URL
parsing and calling the function needed (also called “routing”) etc. It’s all been done before,
so why start from scratch when you can use framework.
Since we’re talking about Laravel here that’s
exactly what Laravel is. A framework of PHP
programming language.
Other popular PHP frameworks are: Symfony, Zend Framework, CodeIgniter, Yii, Cake
PHP, Phalcon.
There are quite a lot of differences between them, and they are competitors on the market,
fighting for the popularity and community members I’m
happy to say that Laravel is
currently the leader, with closest competitor being Symfony.
Framework vs CMS. Why Laravel and not WordPress?
There is a big difference between two things which might seem similar “
frameworks” and
“content management systems” (CMS). What is the difference and purpose of each group?
Let’s start with CMSs. If we “translate” the name they
are systems for managing content.
And content managers are usually not developers they
are people who take care of the
copy, images and text. So that’s the main purposes of CMSs give
those people a tool to fill
in the content.
With frameworks it’s a big difference it’s
a tool for developers to save time on writing code
for some functionality.
Will rephrase it in other words. You can take a CMS and install it on your server (almost)
without any techexperience.
They usually come with visual installers, dragdrop
visual
interface and dumbuserproof
settings.
Whereas in case of framework the result of their code is, well, just another code. You have
to be a coder to use framework.
Examples of popular CMSs : WordPress, Drupal, Joomla
Examples of popular frameworks : Laravel, Symfony, Django
Now, a question if
you want to create a website, when to use a CMS, and when to create a
project “from scratch” with framework? It’s a little complicated, but the simplest explanation is
this: if your project is about content (blog, news portal, company articles etc.), then try to use
CMS. And if your project is about custom data generated by users (profiles, messages,
payments etc.) then it’s probably a framework.
I have also written an article about that specific topic. Holywar: when to use Laravel vs
WordPress? http://laraveldaily.com/holywarwhentouselaravelvswordpress/
Framework vs other frameworks: why Laravel and not
Symfony?
Now, let’s take on the holywar between frameworks. I’m not kidding here developers
actually fight (verbally only, I hope) with each other about what framework to use.
So, in general, there’s not much difference, actually. It’s a matter of how well a particular
person is familiar with a certain framework so
a person who has created 10 projects with
Laravel would probably deliver faster and with more quality than a developer with 12
projects experience with Symfony framework.
There is some classification in frameworks world there
are “full” frameworks (mentioned
above) and smaller socalled
“microframeworks”
examples
are Lumen (“stripped” Laravel
version), Slim, Silex, Flight. So except for those microframeworks,
any uptodate
modern
framework can do the job.
Speaking of “uptodate”,
this is probably the most important argument in this question.
Since you’re probably creating a project with plans to update and maintain it in the future,
you need a framework with big enough future and strong community to support it. So
currently on PHP market there are two strong leaders from that perspective: Laravel and
Symfony . All the others are less popular, for different reasons some
abandoned by their
creators (CodeIgniter), some are too complicated (Zend Framework), some have too small
communities (Yii, Cake PHP).
Now, how to choose between market leaders Laravel
vs Symfony ? Both are really good
and I can recommend both. The main difference between them is strictness of the code
structure. Symfony is much more strict in the way how the code is written, therefore more
popular in enterpriselike
applications, and Laravel allows more “freedom” to developers and
therefore is more popular in smaller webapps
with lower entry to devmarket.
Also, for those same reasons Symfony developers tend to be more expensive simply
put,
there are less of Symfony professionals in comparison to Laravel.
But whichever you choose for your project it’s
more about finding a right developer in that
framework space, than framework choice itself.
What are typical Laravelbased
websites?
Basically, to rephrase the question, what projects are the best fit for Laravel framework. The
answer will be based on my own experience seeing the clients and project offers online on
social networks and job boards like Upwork and such.
1. Twosided
userbased
marketplaces
Basically, there are a lot of similar projects where one group of people want to order
something from another group of people. It might be services, products or just
communication. For example, Upwork is a twosided
marketplace, or any freelance job
board. Another example can be riding service where
(before Uber) one group of people
could give a ride to other group of people. Something like that.
2. Data management and adminpanellike
projects
If your company needs to handle the data and any offtheshelf
CRM is not suitable for your
particular case (or is too complicated), you can create your own with Laravel I’ve
created a
lot of such projects myself for such markets as loan management, event management,
immigration documents handling, window repair company processes etc.
3. Technical integration and APIlike
projects
There are a lot of APIs these days basically,
it’s a set of functions for external usage. For
example, to automatically post on Facebook you have to use their API functions. So there
can be a lot of projects based on using existing external APIs or creating your own API for
others to use for
your own mobile app/portal or other websites.
There might be much more projects, but these are three main ones I see on the market.
Any difference between Laravel versions?
Every framework has its own version history it’s
being maintained and updated. So every new
version brings new functionality, some functions are changed or deprecated, so it’s quite
important to know which version you will be using for your projects.
Currently on the market there are two active Laravel versions Laravel
4 (released in May 2013)
and Laravel 5 (released in February 2015).
Also each of major versions have their own subversions:
Laravel
4 has 4.0, 4.1 and 4.2 branches
Laravel
5 has 5.0, 5.1, 5.2 and, at the moment of writing, 5.3 should be released in July
2016.
According to the roadmap released by framework author, there should be a new subversion
every halfyear:
Laravel
5.3: July 2016
Laravel
5.4: January 2017
Laravel
5.5: July 2017
LTS versions
Also there is an important term LTS
version, which stands for Long Term Support . That
means that bugfixes for that version will be provided for 2 years, until the next LTS version. For
nonLTS
versions bugfixes are promised for 6 months only, unless it’s a security fix which is
provided for 1 year from the version release date.
The first, and so far the only, version to have that status is Laravel 5.1. The next LTS version is
promised to be Laravel 5.5 due to release in June 2017.
Differences between Laravel 4 and Laravel 5
Laravel 4 version was the one which brought big popularity to Laravel framework, but it’s not
updated anymore, and also it lacks a lot of functions released in Laravel 5.
So, in short, for new projects it’s not adviced to use Laravel 4 version you
should use Laravel
5.x, probably Laravel 5.1 as it has long term support, or Laravel 5.2 as the newest version at the
time of writing this.
Differences between Laravel 5.0, 5.1, 5.2, 5.3
In contrast to Laravel 4 to 5 version differences, which were breaking and huge, 5.x and 5.y
versions are not that different. Some functions added, some updated/removed, but the core
structure remains the same.
Chapter 2.
Hosting, servers and deployment
Why should I care as a client?
Good question. On the surface, developer team should take care of all technical stuff, right? But
in reality, as a client you should own the final solution and it should sit on your server(s).
Webprojects
are created in a few steps:
Writing
code
Putting
out the version for testing on testing servers
Deployment
to real (socalled
“production” or “live”) server(s) and release
And it’s being done constantly for every new functionality testing
and releasing it to the public.
So, as a client, you need to understand the process, this way you can predict dates of
deliverables and understand the consequenses of deployment.
Also, you need to understand the difference between servers and hosting solutions in order to
choose the most suitable one and to predict the budget for it.
What is a sharedhosting
and a dedicated server?
There are quite a few of webhosting
providers types, but they all can be divided in two major
groups:
Sharedhosting:
when you buy a hosting space shared with other buyers, so you don’t
own a complete server, only a part of it, therefore you have restrictions in what software
to use, what configurations to make and what operations to perform.
Dedicated
server: when you own a full server and can install any software you want and
configure it the way you want.
It’s really important to understand the difference while working with Laravel framework and,
it
fact, most of modern webframeworks
they
assume you have rights to perform commandline
operations on the server via SSH. And most sharedhosting
servers will not allow you to do that mostly
because this way it’s open for you to perform operations which could affect other users on
the same server.
So my main point for
Laravel project you better have a dedicated server ready. If you have only
sharedhosting
environment, it is possible to use it as well, but project deployment then is much
more manual, takes more time and has more chance of errors.
A decade ago, or even 5 years ago, dedicated servers were much more expensive and difficult to
manage. It all changed with a few companies entering the market with simple solutions and
affordable prices.
Most popular providers of dedicated servers, suitable for Laravel projects, are:
Digital
Ocean
AWS
(Amazon Web Services)
Linode
Depending on your plan (server hardware resources, basically) you can pay from 5 USD/month
to hundreds. So there’s a “quick start” possibility, and then you can expand your fleet however
you prefer.
What is a version control system? GitHub vs BitBucket?
This is one of the most important things that clients should know where
the code is stored. In
modern projects, it’s all stored in cloudbased
systems like GitHub and BitBucket.
Their purpose is not only to store the code, but to save different versions and difference between
the current code and the code from, for example, yesterday or weeks/months ago. It saves all the
history of changes who
pushed which code, with comments and references to what files have
been actually changed.
As a client, you need to know one main thing code
“repository” (that’s how project “folder” is
called on these systems) need to belong to you. You have to be socalled
“owner” of the
repository, your developers need to have adminrights
but not more than that. Otherwise you are
at risk that you will lose access to the code that you technically own.
In other words, you need to be familiar with Github or Bitbucket websites you
need to register,
create a repository, pay for it if it’s not free, and then give rights to your developers.
Alternatively, repository might be created by developer, but then ask them to transfer the
ownership as soon as the project is in final stages.
If you ever hire a new developer to already existing project, it’s useful to give them readonly
access to the repository, just to get familiar with the project and its code, and possible give
estimates. After you agree on the terms of work, you can change the access level to “write”
permissions or “admin” (ability to create other users).
Also GitHub and BitBucket are widely used for opensource
projects and often serve as
developers resume employers
usually ask for candidate’s Github or Bitbucket account and
check their publically available code repositories, if there are any. If a developer doesn’t have an
account on any of these two system it’s
a red flag, avoid hiring at all cost.
Finally, the difference between GitHub and BitBucket it’s
not technical, it’s more related to
pricing. GitHub free account doesn’t allow you to have “private” repositories meaning
all your
code should be available for public, that’s not good for serious projects. BitBucket, on the other
hand, allows to have private repositories for free. And if you’re getting there as a big team, you
will still pay per user per month. So, for clientprojects
and nonpublic
projects I would
recommend BitBucket, at least in the beginning.
What is deployment and how it works in Laravel?
Deployment is a process of “installing” the project to the server, to make it work “in public”.
Imagine software installation process of “Download >
Install >
Some configuration >
Finish >
Use”. Similar here, just not visual it
all happens with “command magic” usually.
Deployment can happen for both absolutely new project, as well as deploying of some new code
for new feature, also for any bugfixes etc. The whole “deployment” term basically refers to
pushing latest code changes to live server.
There are various ways to get the code from wherever developers write it to
the server.
In the old days it used to be done by transferring files via FTP and copying database changes via
tools like phpMyAdmin. With a lot of possibility left for human error or connection lost.
These days it’s much more strict and therefore reliable we
have version control systems like Git
and database migrations scripts, as well as ability to easily put “Under construction” page while
deployment is in progress.
So, how does it work in a typical Laravel project?
1. First, the code is placed to a version control system like Github or Bitbucket, in a
structure called “repository”.
2. On the first deployment there’s quite a lot of magic involved “
cloning” that repository,
configuring the folder with domain name, setting up the database etc.
3. Then, with every deployment you need to SSH into the server and from there run
a
command “git pull” to pull latest code from Github or Bitbucket.
4. Then there are some additional commands for checking new packages versions,
database migration, stoppingstarting
the whole project while deploying etc. You don’t
need to know about that magic.
Painfully difficult at first sight, isn’t it?
That’s the point why I’m telling you this you
need to understand three things:
1. You need to have dedicated server to run proper deployment process. There’s no way of
running SSH and Termianl commands on shared hosting environment.
2. Deployment is being done by professional developers, and clients don’t need to do it,
neither have access to do it if
you want to change some texts somewhere in the project,
there should be a CMS built for it, or you need to ask your developer.
3. Deployment isn’t just “one button click” system
needs to check code and merge with
previous versions, possibly run some tests etc. That’s all needed for a reliable project
and for the future deployments. So don’t ask your developers to “just deploy” it’s
not
that simple. Of course, there are tools like Laravel Forge and Envoyer that makes life
easier (we will talk about them in the next chapter), but it’s still not a 1minute
job.
Additional tools/services for Laravel deployment
As I mentioned in the previous chapter, deployment of the code is pretty complicated process actually,
not only in Laravel, in any modern robust projects. So, to make it easier Laravel
creator Taylor Otwell has built some additional tools to make it easier.
Laravel Forge
If you or your developers don’t like to work with commandline
environment too much, Laravel
Forge is a system where you can log in and manage your servers visually create
a new server,
add some deployment scripts and click “Deploy Now” button.
That’s only the surface there
are much more functionality in Forge, but to have a basic
understanding it’s
used to manage servers without Terminal or Command line interaction.
Especially useful if you have more than one project and need to perform multiple operations with
them.
Envoyer.io
Envoyer is used for deployment with socalled
“Zero Downtime”. You see, the whole deployment
process takes time: from the start of the process, it might take a few minutes to get the latest
code, run database migration script, download new versions of packages etc. So usually, while
it’s in progress, the website itself is either not working at all, or shows “maintenance” page, if
configured.
But to avoid downtime in the first place, you have Envoyer it
does the “magic” by deploying new
changes to a separate folder, performing all those operations there, and then just repointing
your website to that new folder. Again, especially useful if you handle more than one
project/server, or if downtime of your website is really expensive with every minute.
New Relic
This one is not from Laravel family it’s
a tool to monitor your servers and application
performance. I really recommend it for those cases where you need to quickly see the server
load percentage, define the slow pages/functions easily, see some charts for the last
hours/days/weeks.
Though not created by Laravel creators, New Relic is quite conveniently integrated into Laravel
projects so
in New Relic dashboard you can see Laravel URLs, analyze them and make the
conclusions you need to optimize performance.
There are actually much more tools available for deployment and server performance, but I’ve
mentioned the main ones that are used widely.
Process of testing the project
This topic is really important, but can be handled in really different ways. I will try to be as general
as possible, so if you see other approaches to testing that’s
totally fine.
There are two types of testing technical
testing by developers, and users/clients testing by
nontech
people. As a client, you shouldn’t care about the first one. However developers are
testing the system, it’s totally their business. Of course, you need to be sure they are doing at
least some serious testing you
can sense that by how many bugs you find later yourself.
For nontech
testing by clients and nontech
people, developers usually set up a “testing
environment”, also can be called “staging server”. Usually it’s assigned to some temporary URL
address or even IP address, possibly even with username restrictions or even IPbased
only.
Then you get the latest version of the project, you can test it as a client, and provide feedback or
report bugs. That “staging” version should be possible to “break” without any consequences,
cause real users don’t see it in public.
That “staging” version remains active even after launching the project live every
new feature or
bugfix should go through a proper testing on that environment and only then get pushed to “live”
server.
There’s also a thing called “automatic testing” you
might have heard such terms as “unit testing”
or “testdriven
development” (TDD). It means that there are special scripts that test specific
functionality of the project faking
the data, running the functions and checking if all works ok.
Basically, it’s used to test things automatically, instead of clicking all the links manually by
developers or clients.
However, it’s not that simple to set up proper
testing coverage usually adds more time for
project first version delivery, although can definitely pay off in the long term by introducing less
bugs. Also, it’s quite important to have experienced developers writing the tests, otherwise you
can waste a lot of time on tests just for the sake of them, without catching actual bugs effectively.
Who is reponsible for server maintenance and backups?
If you have a new project launched, you probably celebrate and dive deeper into monitoring the
statistics new
users, clients, potential income. Yay! But don’t forget to take care about the
infrastructure to keep it all running smoothly after the launch.
Server maintenance by
that, I mean basically keeping it all running totally
depends on your
hosting provider and on your developers. Some of the operations can be done by hosting
provider, others need to be handled by developers. You need to ask both of those parties the
appropriate questions about it.
Maintenance often includes changing server configuration if needed like
upgrading
PHP/MySQL version, installing some code library, upgrading hardware configuration. That is
usually done with a particular reason and in need, and in most cases can be performed by
developers, without hosting company support (provided they have proper documentation for it).
Backups this
is one of the most important questions. Basically, you need to have backups for
two objects your
code and your database. The code, actually, doesn’t require the backup in
case you’re using proper version control system this
can be your backup point, but just in case I
would advice to still have code backedup
somewhere.
What is more important is database backup, especially if you have a lot of data or it’s pretty
sensitive to lose. The most common approach is to run database backup scripts from time to
time weekly
or daily or even hourly the
script just takes current state of the database and
makes a copy to a separate socalled
“dump script”, which later can be run to restore database in
case of emergency.
The thing I would advice is to keep your backups separately from the main server somewhere
else physically. Quite a common practice nowadays is to transfer the backups to Amazon S3 or
Dropbox Laravel
have an awesome package which makes this process surprisingly easy to set
up, so no reason for not doing it.
What is an API and integrations?
This topic is broader than Laravel, so first let’s cover the theory of APIs.
API stands for Application Programming Interface. Clear, right? Ok, will try to explain it in human
language.
Basically, if a website or any webbased
project wants to have some external website or app
performing some operations, that project needs to have available API it’s
a set of functionality
available for external (or sometimes internal) use.
A few examples: if you want to send an email via Mandrill, or SMS via Twilio, you call their API
functions, according to their documentation. It doesn’t mean that you have access to their code you’re
just using the functions they had made available for public: like sending message, get
message status, add a subscriber etc.
Another popular example is integration with mobile apps. If your website database needs to be
accessed via your mobile app, then you create an API on the backend,
which then gets used
from the app. Moreover, that API can be used later not only by several of your apps on several
platform (iOS, Android, Kindle whatever),
but also externally by other apps for integration.
So, in short, API is the most popular way for integration one project into another one
side is
providing API functions, another side(s) is using them.
Now, there are two ways to use Laravel for APIs.
If you want to use some external API , you need to look up their documentation whether
that
service has an API at all, if so then
look at the documentation and examples, preferably for PHP
language. For some of the most popular services on the internet like
mentioned above there
will be readymade
packages either for PHP, or even for Laravel specifically.
If you want to create your own API with Laravel, you have two architectural choices:
To
create a full Laravel project and make some part of it as an API, there is a great
package for it called Dingo API look
it up online;
You
can create onlyAPI
project which won’t have any visual forms, just that API
functions for
that you can use a microframework
called Lumen. Basically, it’s a stripped
down version of Laravel and is lightning fast.
Finally, let’s get a little technical here, to know the terms if you’re planning to create your API or
use external ones.
When creating your own API, you can also see a technical term REST API . REST stands for
Representational State Transfer but that doesn’t say much to you basically,
it’s a
communication protocol for creating APIs.
Some other terms to know are JSON and XML these
are the ways of passing the data from/to
API functions.
Bonus Chapter: project management
Why this chapter here?
Laravel is just a framework for PHP programming language, but for successful project delivery
coding skills and technical knowledge is not enough. Socalled
“soft” skills are as vital as writing
the code, so I decided to touch on that part as well. Having delivered hundreds of projects, and
having been a project manager and a business owner for 5 years, I know a thing or two about
successful project management.
The main thought here that,
as a client, you cannot just write “I need a website like Facebook”
and assume that developers will figure it all out by themselves. Of course, they are smart guys,
but they don’t know your business needs like you do. To be fair, developers usually don’t care
that much about business they
care about delivering good quality code, which is not always the
same goal as yours.
You have to take care about the project initial description and explanations, and also be involved
in all stages of the project. I’m not talking about micromanaging
and constantly bothering
developers with “How’s it going”, but I mean being always there if you are needed for
answering
the questions, providing feedback and testing ongoing versions.
You don’t need to be technical. You don’t have to know the internals of Laravel, or any coding for
that matter it’s
usually enough that you explain your needs in your own words, from business
point of view, and then it’s a job of devteam
to turn it into a technical specification first, and then
into the final result.
What often helps if
you have a lead technical person or a project manager from your end, who
would be kind of an interpreter between your world and developers. That person can help to
prepare the technical details for the project itself or specification for potential candidates for the
job. Otherwise, if you don’t have that person, you would need to perform project management
yourself, or rely on developers to be businesssavvy
and help you with that. Usually that means
higher price cause
in this case you’re hiring not just coding hands, but also person/people to
help you with overall strategy.
How to prepare a project specification for developer(s)?
That’s usually the most painful question for a client how
to present the information to the
techteam
while being nontechnical?
Of course, the full answer is “it depends on the project”. But I will try to describe the most
common scenario when
you are a business person and you know what you need, and you
need it to be done from the technical side. Easy, right? Not so fast.
First thing don’t
prepare a really detailed technical specification with 20+ sheets. No one would
actually read that. You need a simple explanation of the goals you want to achieve.
Here are things which absolutely need to be answered in every job description/specification:
1. Brief description of the project a
few sentences/paragraphs about setting up the scene
of what project will be about, what audience does it serve and what are the goals for the
project what
would you consider a success?
2. Structure of the project is
it a web application, a mobile app, which platforms etc.
3. If you know the programming languages needed list
them all. If you are not sure about
some of them, mention it here then
developers would know they can recommend you
alternatives or better solutions.
4. Potential integrations with other systems: email services, payment gateways,
imports/exports, APIs etc.
5. Other people involved. If you’re higing a backender,
then mention who will take care of
frontend/
design. If you are not the only decision maker, mention a structure of your
team.
6. Deadlines for deliverables/milestones. Please be realistic or consult a specialist before
estimating time yourself. If you don’t have a deadline anyway
come up with something,
otherwise you risk to hire a freelancer who would work on nights/weekends in their spare
time (it’s not urgent after all, right?) and the project won’t be finished at all.
7. Budget. Again, be realistic you
cannot expect a project like Facebook created for a
thousand dollars. Or ten. If you don’t have a budget set be
honest about it.
I think that’s it hopefully
I haven’t forgotten anything. Of course, you can add as much as you
want, or skip some parts if they are not relevant, but from that list a developer can have a basic
picture of what needs to be done.
Important notice: this minispecification
cannot serve to provide accurate quote/estimate for
time/money. That can come up ONLY (and I mean, ONLY) after proper discussion of some of the
details which might drastically change the timeline. For example is
the project multilanguage?
That question alone can double your budget.
And finally, speaking of questions, if you are in process of hiring a developer, prefer those who
ask a lot of questions, especially nontechnical
ones, about your business processes and goals.
That usually means that they genuinely want to deliver value, and also care about your business,
not only the code. And yes, it proves they actually have read the description and prepared their
homework.
Recommended tools for successful projects
People care about tools a lot. In my opinion, we should care more about the processes, and only
then choose the tools that help us to implement those processes.
Now, what is the most important in project success? Clearance. For all people involved at any
stage of the project. As a client, you need to know the status of the project and of the tasks. As
developers, they need to have the tasks clear and your feedback on time.
Project management tools
On a basic level, you can actually set up a simple Google Docs document and use the comments
section to discuss various parts of the project. That does work, nothing wrong with that.
But if you prefer to get into some structure with tasks, I suggest to you a tool called Trello .
Basically, it’s sticky notes system in browser where you can create columns (like To do, Doing,
Done) and dragdrop
tasks from one column to another. Really simple and no knowledge needed
to pick it up. Especially for smaller project where at any time there are 1020
active tasks.
There might come a time for bigger projects where
you need more proper structure and timeline
view: deadlines, milestones, possibly Gantt charts etc. For that Trello is “too simple” so I would
recommend two options: JIRA or recentlyrenewed
Asana with plugins (called “apps”). These
are more suitable for bigger teams/projects and feel more “corporate”.
What else do you need? Ah, communication tools. Are you still using email as a main
communication channel?
Communication tools
For livechat
discussions I really recommend Slack (who doesn’t these days, its growth is
massive). It’s also great for setting up automatic notifications whenever some new code is
deployed, error appears on live server etc.
For videotalk
it’s still good old Skype . Or, actually, whatever you prefer (Hangouts etc.) you
usually don’t need superhigh
quality video, the goal here is to share updates and feedback
effectively.
And, actually, I’m not telling to get rid of email it’s
still important to have some information there
cause it might be easier to find later than in Slack/Skype history. Depends on your project and on
your workflow. Just try not to get to subjects like “Re[20]: Project update”.
Finally, project documents and files . I recommend to use any kind of cloud storage Dropbox,
Google Drive etc. Whatever you prefer and whatever is the fastest to set up for the team, they
are pretty much the same. The goal here is to have documents and files available for everyone
whenever they need them.
What is “Agile”, “MVP” and why understanding it is crucial
Have you ever heard the term MVP? No, I’m not talking about Most Valuable Player in NBA or
any other sports. We’re talking business here and
in this sense, it stands for Minimum Viable
Product . In other words, the smallest version of your project that can be usable by public.
Here’s why you need to know and understand that. The most common problem of IT project
failure is socalled
“scope creep” meaning
that there are so many changes along the way, that
initial idea and specification becomes wrong on many levels, and timeline gets doubled, therefore
business runs out of money or fails to deliver the project to the market on time.
To avoid that, you must aim not at creating the fullblown
project version, but the first small
portion of it, with only main functionality, and then release. Yes, that’s right, release unfinished
product to the market. Or, better yet, to small portion of the market for
“beta” testing first. And
this is what is called MVP. And then you iterate, adding function after function, reacting to the first
feedback from users, and possibly even rejecting some planned functions as not needed
anymore.
Now, quite often MVP is misunderstood in a radical way. Some people understand it as “just
release anything you’ve got”. No, no, no. The word “viable” in the abbreviation means that the
product needs to be actually usable and “feel” finished. So no bugs if possible, just less
functionality for the beginning.
Guess what I’ve
just described “Agile” methodology to you. In my own words, I view this agile
description of software process: Release, Learn, Repeat. These iterations of release cycles are
also often called “sprints”.
Compare that to the old methodology called “waterfall” where
you have all the documentation
upfront, scope doesn’t change at any time, you just need to deliver what’s agreed point
by
point, with all the deliverables known clearly upfront. That would work (and did work, kind of) in
perfect world with no changes. But modern IT world isn’t constant anymore.
So, to sum up this little chapter, I advice to discuss the whole project with developer team, but
aim for the first milestone release
of the first MVP version of the project. After this release you
would know much more about your potential users, project infrastructure itself and possibly even
have first traction and
then you will be able to make much clearer decisions on where to go
next. Or whether to cancel the project as unsuccessful that’s
good too, you save money/time.
Getting back to Laravel world, this framework allows to build web applications really quickly. If
you don’t want to dig deeper into architecture of the code, design patterns and all the “technically
correct” ways of building complex software, your developers can ship an MVP in months or
weeks, sometimes even days. It just depends on you what you want to include in that first
version, what do your customers ACTUALLY need or,
maybe, what they cannot live without.
How to manage remote freelancers
A topic for a separate book, perhaps. But I will give some essential advice here there
are
common principles and ways to make a remote “mess” work. Here are my 5 tips.
Tip 1. Explain and discuss everything upfront
The clearer you BOTH are on what you need to build, the less chance is for getting it done
wrong. So before writing any lines of code, spend enough time on explaining stuff, discussing the
details and preparing necessary documents/plans.
Tip 2. Communicate often
The most often problem with freelancers is disappearance. Which might actually happen on both
sides a
developer can “stop answering emails/calls”, or you as a client can “become busy for a
month”. In both cases it leads to disaster. So arrange catchups
once a week at least, I would
advice twice a week (on Monday to discuss the plans, on Friday to discuss how it went), or for
some projects it even makes sense to have daily “standups”
short
discussions for 1015
minutes every morning.
Tip 3. Be always there, but don’t micromanage
A little extension of the previous tip. A client needs to be available at almost any time of the
project to answer questions, give feedback, and just for the sake of general feeling of guidance
and helping hand. But you shouldn’t be the one asking “How’s it going” every day or two, or
interrupt the discussed work with “genius ideas” too often. If you hire a proper developer with a
goal to help your project, they know how to do their job. You just need to provide information
when it’s needed.
Tip 4. Tell them WHY. Give them a mission.
When would you be more motivated if
you’re writing the code just for the sake of it, or if you’re
writing the code that would save someone’s life? I am a little paraphrasing here, but you get the
point developers
need to know the business goals at least on a basic level. In other words, they
need to imagine a face of a person who would use the software and benefit from it. Then it
becomes a mission to help that person. And help your business, as a side effect.
Tip 5. It’s all about the money.
Forget any project management if you have wrong and unmotivated team. Let’s face it if
you
hire a cheaper developer, you’re taking a risk. You might actually succeed in that lottery, but
usually the more person is motivated financially, the better outcome usually is. So if you expect
excellence from a developer for 1020
USD an hour, then ask yourself how would you work for
that kind of salary.
How to launch and finish webproject
successfully?
While creating the project, it’s easy to forget that proper launch and finish isn’t as simple as you
think you
need to plan time for it. Here I’ll try to provide a kind of a checklist, what you need to
take care of at the end of the project.
Technical stuff
1. Is the domain working properly? Www or nonwww,
http and https (you are using SSL
certificate for HTTPS, aren’t you?)
2. Do you have error logging procedure to catch any errors including
the ones happenning for
your visitors, nonvisual
ones, server down etc.
3. Do you have a backup strategy especially
database backup. Are they on the different server
than the project itself? Are they ready to be used to restore data at any time? Have you tried?
4. Do you have all analytics software code installed? On all pages of the website? In simple
cases, Google Analytics is enough, but you might want to have additional scripts or local solution
like Piwik.
Nontechnical
stuff
1. As a client, do you have enough information from your developer to use the project? Like
changing text in the future, manage the content or database entries, have they provided any
training or documentation?
2. Have you agreed on the support terms, hourly based or perhaps next milestone of the project?
And yes, ALL projects need support it’s
really painful to look for another developer to provide it
from aside later.
3. Do you have all the ownership of all the code repositories, licences for needed plugins or
themes, software etc.?
4. In general, imagine that from tomorrow your developer is gone they
moved on to other
projects. Do you feel “secure” and generally happy? What do you possibly need to sleep better?
These are some tips, there might be more, depending on the specific project. Basically, it all
comes down to communication and proper planning ahead both
for the main deliverable, and
for the future of the project.