Software engineering is hard.
No matter what you hear or read, learning how to develop software might be easy at first. But developing an application or a product takes much more than writing code.
You need to communicate with the client, get the requirements straight, iterate, improve, and deliver.
You need to understand what the client needs. You will also need to question your assumptions and to make sure you address the real needs.
As with any engineering field, crafting proper software requires careful planning, careful execution, smart decision making, and feature prioritization.
You need the right combination of skills within your team. But most importantly, your team must have the correct mindset and common drive to bring an idea or a product to life.
A software engineer will face challenges and will be tasked to complete the project during the timeline agreed upon with the client, with high-quality standards by the release date.
To do so, a software engineer must carefully incorporate a particular methodology to navigate the waves ahead of him successfully.
Both you and your client should know the outcome and the purpose of the project beforehand.
What does the client need? What does he or she expect to receive?
Expectation management is when every detail of the project (the scope of work) is clear, precise, and concise for both you and the client.
When you define your scope of work, you set the expectations for both your team and the client. You must make sure that every detail related to project requirements is clear and precise.
Requirements do not change in the middle of the project unless the nature of the project allows it to, which you should be aware of beforehand.
You're in the middle of the project, and the client decides to redesign part of the website or application.
Depending on the size and complexity of the request, you could charge your client for the extended scope.
Whether you do charge them or not, make sure they show you an example of what they expect and what they have in mind. A visualization of what to expect helps your clients express their needs in as clear a manner as possible.
Designing, and God forbid, implementing the redesign without the client's input beforehand is a waste of resources.
Progress bars are created to show you your progress, or the progress of something that you are waiting for its completion (think downloading)
The same applies to your client.
Showing progress to your client through continuous delivery and keeping him posted regularly about the status of the project will not only keep the client engaged throughout the project: it will also allow him to provide you feedback, iterate quickly over the features, improve on them, and test them.
The project's scope should be locked down and agreed upon beforehand, with minor room for change.
Leaving a small room for change might sound counter-intuitive to some clients and developers alike. But this is the surest way to deliver a successful project on the initial time and budget.
If there is a hard deadline, significant change requests can be left to a second iteration. If they were important, you should have included them in the first iteration.
Proper communication at the beginning of the project will eliminate ambiguity and surprises along the way.
Getting the requirements straight before jumping into development and design is the foremost step before kicking off any project. Identifying key stakeholders, doing a risk analysis, and planning your sprints comes second.
Successfully delivering to a client is the surest way to grow your business and reputation. The client will recommend you to other prospects.
Successful projects will breed other projects and prospects.
Anyone can write code, regardless of seniority. But allowing the client to experience the entire software development lifecycle, and delivering smoothly and successfully is the surest way to more successes down the road.