Each time a development team achieves a target or resolves an issue in a project, it is a moment of cheer for everyone. Also, whenever a project team receives a patting for a job done well, the credits are well communicated to all.
However, since not all members of a team are involved in client facing roles, a developer’s real role remains lesser known to people who communicate with the project teams from a Macro-level.
The current post will take you through a short journey highlighting a typical day in a developer’s life. This blog will narrate an experience highlighting not just the hardships of project team members but also the revering spirit they hold towards their work responsibilities which motivate them to work overnight too, whenever needed, to deliver their best.
Picture this: A couple of days back we got a code challenge from a prospective client. Code challenge was simple – creating a quiz application using HTML 5, bootstrap knockout with some ASP.net Web API 2. Seems pretty simple and straight forward Huh? Even we thought so, initially. We thought it was just a day’s job and started dwelling and conceptualizing in terms of project architecture flow of app as well as DB design.
But believe me it wasn’t that simple. It took us more than 16 hours to come up with a solution.
We wanted to build a simple application which could show our skill set as well as not overkill this simple application. So, we divided backend and frontend and put one resource on each of those. We quickly conceptualized frontend.
Backend concept was pretty simple and straight forward consisting of SQL server DB with 5 tables to store users, questions, question options, user answers and user sessions; .Net 4.5 solutions consisting of BAL, DAL, Models/Entities, Utilities project along with a Web API 2 project.
Elmah was assigned to handle errors and exceptions while log4net was chosen for logging each request/response or any other process logging.
Entity framework handled all DB operations and we used linq lambda expression.
And we were all set to start building the application.
We got our first hiccup when we updated a table in DB and refreshed edmx. We updated edmx and we were good to go. By this time couple of APIs were ready. But when we re-ran API after updating edmx it refused to run and started showing run-time exception for not loading “DataModel.dll”.
To structure our solution, we created entities project which could store all the entities related to projects to further enhance this. To have all entities at single place we moved tt (entities files for edmx) files to this project by running run custom tool option. As we were using entities project in DAL to refer all entities, it seemed that somewhere between updating edmx some of the entities were created in DataModel project (where edmx was residing).
We did all types of cleaning like removing project references, deleting edmx adding as new, removing tt files from data model and entities. Yet, nothing seemed to work. Quite frustrating right?
After couple of hours we were able to fix this by deleting both of the projects and adding them as fresh and updated files name. Phew!But we still had a whole night to complete this.
And The Night Started
Frontend was mostly completed in terms of functionality but designing was still under progress.
Honestly, as a developer I never earlier cared about designing and UI presentation of application. I only cared about whether the functionality was working under minimal HTML design requirements. So, I published my API and hosted on my local IIS server so that frontend resource could hookup to API and check his implementation. After publishing API and hosting on IIS I was ready to see PAI working in action but the PoC wanted to test our patience. It refused to run first time. After trying it for 30 minutes, we were able torun it smoothly. Now we were in a position to test API integrated with quiz web app.
After some small tweaks and updates, the quiz was finally on our screens and we were able to run it and display results.
Wow! Great. At last,the most essential feature was working good.
We decided to go one step forward and implement token-based custom authentication for secure API access. This is where the actual problem started.
It is understood that tokens are always sent in request header by setting a new key and its value that will act as token. Here in quiz application we used jquery ajax request for all operation. We set header in jQuery. But, it didn’t work. We didn’t receive any token in request header after applying breakpoint on API project.
We thought we might have spoofed up in setting header so we updated code and check again. Alas! it didn’t work even this time. After spending a good amount of time in analyzing the issue, we decided to use the British divide and rule methodology. To identify the issue we first checked whether we had set access token in header correctly and therefore we disabled authentication from server side and again checked. Guess what, it worked now perfectly. Cheered with this small success we again set access token in header in JS and applied breakpoint in code behind to see whether access token was received.
Bingo ! It was there. And here, we finally figured out that code for setting access token was indeed correct while the issue was at be server end or somewhere in our implementation.
Now we know problem was at server side so we again enabled authentication and checked why header was not being set. When we closely monitored browsers ajax request in firebug and fiddler, we noticed that there were two requests being made to server one, out which one got denied instantly and other received on server but without access token in header.
After determining root of issue we knew what we need to enable CORS on server. After that our app was running perfectly. We did some tweaking and optimization and we were all set to provide code to client.
This is one typical situation which almost all developers come across not once but multiple times during their careers. Here, the biggest challenge was that time estimation went wrong and the pressure kept mounting as the clock was ticking. But, this small PoC experience helped us realize how well the Netizen spirit runs through all of us and none of us bothered about working late night. Kudos to the .net team for helping us in figuring out real problem and providing all types of suggestions to look for.
The challenges which developers face, however, are many more.
Typical Challenges That Developers Face:
- Lack of clarity on requirements
- Sudden changes in requirements and design
- Lack of user – centered approach
- Communication gaps within teams or with client
- Extended timelines
Hear it From Our Developers That How They Deal With Everyday Challenges
While these issues appear in the daily life of developers and other members in a development team, they have their own ways of dealing with them. At Net Solutions, we have a unique way of identifying constraints and resolving them on the spot.
Challenge #1 Lack of Clarity On Requirements
It often happens that the requirements are well communicated initially but developers end up with situations where the actual development doesn’t match the original requirements. Sometimes they realize that the requirements were inferred incorrectly.
“These become our daily learnings and we invest adequately in first developing a deep understanding on the requirements. Nothing can be better than receiving appreciation from the client. It gives us a high.”
-Umang Bhusri, Android Developer.
Challenge #2 Sudden Changes In Requirements And Design
Due to some communication gaps the developers sometimes come across sudden changes in the requirements. When they realize it in the middle of a sprint, especially, when the client reiterates those requirements, developers are in a fix. The whole functionality changes and it results into delayed deliveries.
“Sometimes the changes are communicated suddenly. The changes in design can still be managed without much delays in delivery. However, changes in requirements have us a bit pressurized as our endeavour is to deliver our best and meet the deadlines. It does get challenging but these challenges help us nurture our skills to deliver faster. So, we welcome them.”
-Supreet Sethi, Senior Software Developer (.Net)
Challenge #3 Lack of User – Centered Approach
A development team comprises members with a variety of roles and skill sets. While some of the members are able to work with user- centricity approach, others may fall a little behind in that fray. Managers have a big role to play here in ensuring that the whole development takes place keeping the end users in mind. Retaining that mindset in developers remains a challenge sometimes. We enjoy sitting late night because we do get a lot of institutional support.
“We always try to have that approach of keeping the end users in mind. But sometimes deadline pressures result into a lacking retention. The beauty of working with a team lies in learning from others about that approach. Also, in case of extended timelines, even though we have to sit in office late night, it does make us feel bad because we do get a lot of institutional support.”
-Geetika Chandra, Software Tester
Challenge #4 Communication Gaps Within Teams or With Client
Despite all the efforts a client and a manager puts in ensuring a smooth flow of communication within the project teams, gaps are likely to occur.
“It is a manager’s biggest responsibility to plug all the gaps in communication within the teams as well as with the clients. It is very important to ensure that everybody is on the same page. This becomes even more important when we decide our timelines. At Net Solutions, we adopt practices like daily prioritization and stand up meetings. These things help us bridge all those gaps.”
–Amit Manchanda, Project Manager (Mobility)
Challenge #5 Extended Timelines
Developers work under strict deadlines. Their efforts are to deliver before time. And in fact, they are able to achieve that mostly here. However, they do come across a common constraint of process delays.
“Since a team involves a whole set of people working on multiple tasks and some of them may not be available at the exact time when you need them around, the development tends to get delayed. This results into extended timelines. The Agile stand-up meetings and daily prioritization techniques help a lot. ”
–Bharti Sharma, iOS developer.
Taking full ownership of their roles in a project is what takes the developers ahead in the career ladder. Success lies in discussing solutions and not problems. Finding out the biggest constraints is what we all try to do to deliver our best each time.