Professional Documents
Culture Documents
Software Engineering Tips (Part 1)
Software Engineering Tips (Part 1)
There is no defined process or methods in Software Engineering that can ensure the
ultimate success of any Software product. While a failed product may have been guided
by the greatest Software Engineering rules, a successful product may not have been
begot through proper engineering process. The right product could be provided when it
is guided through the right path applying the right resources at right time. A good
Software Engineer is the person who can utilize the right ingredients in right time
satisfying the requirements of people and product.
I have been working in a Lead position in Development team for a long time. So I have
taken plenty of interviews. We always hire good programmers. But only being good in
programming does not help to become successful as a Software Engineer. So I share my
experience and thought with my engineers that have helped me in satisfying client
requirements and providing quality work. I would be glad to share few of them here as
well.
Prefer the easiest path to meet the Goal: Remember the objective of work, and
always follow the easiest path to meet the goal. There could be different ways to meet
the destination. Try to follow the simple and right path. Forget about unnecessarily
heavy use of technologies and frameworks. Many times developer wants to use any
specific technology that s/he is interested in. But when we are working for client, it will
be very unfaithful to use something that may not be correct for the client project. We can
give priority to our own preference when we are building our own product. But for client
project, use the best thing that is best for the client.
Design Patterns: Follow industry standards and design patterns in design and
implementation. But never blindly follow known patterns and always use common sense
before using any specific pattern. I had an interesting experience with a boy. He learned
Singleton pattern. Then every time he was asked to write any utility stuff, he always used
singleton forgetting about the context. This reminds me story of a child. Whenever his
teacher asks him to write essay or paragraph he always brings a crocodile in his writing.
Even if teacher asks to write essay on Cow or on Liberation war, somehow a crocodile
appears to eat cow or to play role in Liberation war.
Identify all solutions: Identify all possible solutions of any specified problem. No
matter if all solutions are not very efficient. I can guarantee that in many cases the best
solution would not be the optimal solution. Especially in legacy systems we cannot
always apply solution that would be best for a new system. We need to understand the
context. Doctor does not apply same dose or same medicine to his/her every patient of
same disease. Good doctor would first check age, and condition of patient and then
prescribe accordingly. Present all solutions to team and to client based on their expertise
identifying pros and cons of each solution. Do the brainstorming and then decide for the
right solution.
Cost Effective Design: Think and analyze cost effective designs while proposing
solutions.
Code Review: Do aggressive code review. Always ensure that each module of
functionality developed is reviewed by a teammate. If all teammates are novice then
request for external reviewer. But remember that external reviewers may not be able to
confirm that right functionality is implemented in right way. Externals mostly focus on
coding convention and overall design to solution.
Continuous Consultation: Always consult with team. Include every possible party in
understanding/analyzing requirements and finding solutions.
Never become Idle: Usually between product releases we enjoy some free time.
Discuss about possibility of improvements, do R&D and study new technologies for
future in free time. Be proactive to get involved in multiple projects to increase your
dependency inside company. Utilize your time. Always do meaningful things. Time is
something that will hurt us acutely in our afterlife.
Unit Testing: Whether we use TDD (Test Driven Development) or not, unit testing
should be mandatory to some extent.
Code repository: Make sure that latest codebase is always available in code
repository.
Do not give stuff for free: While submitting deliverables, make sure the deliverables
satisfies all requirements of client. Sometimes we may give some smart and small
features for free. But we of course should not give full of creativity for free. There must
be some items defined for future release.
No Excuse: Avoid giving excuses to client or management. Show logical reasons at the
very beginning before any possible risk arises.
Study Vendor Manuals: Always study vendor manuals, protocol and regulatory specs
and documents from clients very carefully.
Measure ROI: Do meaningful and fruitful things. Measure the return on investment
and try to be very effective on achieving the benefit.
People and Productivity: Be concerned for the interest of both people and
productivity of company.
Praise coworkers: While working with coworkers internally and in client side, always
try to say good words about coworkers to internal and client management.
No Plagiarism: Strictly avoid plagiarism and follow terms and conditions while using
other’s license or proprietary stuff.
Keep eyes open: Always keep eyes open and look for new technologies. Analyze and
identify how adapting the new technologies can help our existing and upcoming
projects.
Seek Help from the Almighty: Seek our Sustainer’s pleasure and help in
approaching problems.