Learnings of a Full Stack Developer @ His Own Startup!
It was early 2015, and a life changing 10-month episode of my life had concluded at Lok Biradari Prakalp, Hemalkasa. A dream-come-true of working at Dr. Prakash Amte’s LokBiradariPrakalp, had given me more than what I had expected.
- An opportunity to work with some of the most selfless human beings I’ve come across
- An opportunity to put my so-called technical expertise and graduation degree to test, and observe the flutters it’d create in an environment where it’d be useful at the very grass-root levels of the society
- Put my decision making skills to test, and to live the dream while I could
- Increasing my risk appetite and experience adventure in it’s raw shape-n-form
- A bunch of truest friendships made, and a few old ones revalidated
- Increased respect for planning (dreaming) before execution (doing)
(A story on life changing Hemalkasa experience soon… :) )
The lessons, memories and events that had happened over these 10 month episode eventually seeped into the everyday life as well. It was under these mental conditions (pun intended ;)) that I decided to jump on yet another roller coaster, when I decided to help create and lead a technology branch of a small IT services setup in Pune, India. More about the company here. We envisioned on providing a world-class software development and consulting experience to our clients. We decided to target Mobile and Web as our domains of expertise, and later on delve into other domains of software including machine learning and AI.
Initially we decided that I would take up the actual coding part, while Saurabh, my friend would handle the client meetings, convert their needs into technical requirements, plan delivery schedule etc. It was my responsibility to deliver goods on the promises that Saurabh was making to the clients. I ramped up on mobile development platforms (Android Studio and Xcode), backend frameworks (Django, Node etc.) and made sure that we had a good grasp over the chosen technology stack. We also had to make sure that we understood the deployment of the applications on cloud services very well. In first 4 months we had a couple of successful projects under the belt. We were literally working 24*7, learning nuances of our technology stack (which was Android-iOS-Django / Android-iOS-MEAN at that point in time) by night, and implementing them by the day. By the end of first year I was busy exploring the existing technology stack as well as was trying to get my head around newer languages-n-frameworks in the software development circles (likes of React n ReactNative!). It was then that we felt the need to have some helping hands around in terms of churning out the daily code for projects we had planned. I found myself at a peculiar position to mould the technology culture of a team while at the same time I was learning from the past mistakes, exploring technology trends and in doing so was trying to evolve into a better engineering unit with each day. Following are a few learnings I’ve gathered over these past 2 years of running a IT services startup:
UX is an essential part of software development along with UI
We had started with all guns out, and thought that we could cater to any client, any software need, and could fit the deliverable in any timeframe. We got the opportunity to work with clients in the domains of Entertainment, EduTech, MedTech, FoodTech, and LifeMentoring. For the most part of 2015–16 we thought our core competency should be software technology stack. We relied heavily on domain expertise of the client for designing and developing the product. However, this was a problem which came to bite us as we started working on more complex products. Ultimately we understood User Experience (UX) study and planning is absolutely necessary along with User Interface design. A software development and consulting team can not be effective enough without the domain knowledge of the business for which the software is being developed.
Owing to this learning now we have a process setup wherein we:
Understand the brand attributes of the client/company including
- Culture of the company which the software will represent
- Core values of the company upon which the software will be developed
- Study of community of users who will use the software
- Benefit that the software is going to provide to it’s users
- Value proposition of the features provided by the software
Create personas of the users who will be using the software and that way anticipate their specific needs
The above knowledge helps us in designing the logo, color palette, and wireframes for the project
Ultimately the mockups of how the actual product will look like are designed and sent to the client for approval
We’ve been able to achieve this in collaboration with AwesomeChaps 😉
Following this process has improved our development workflow by leaps-n-bounds!
Setting up a process for software development is a MUST
Our initial projects had little or no process setup for planning, designing, development and deployment. I thought that keeping it simple would get rid of the unnecessary red tape. We were successful in getting rid of the unnecessary bureaucracy, but at the same time fell into the pitfalls which made it impossible to measure our productivity and efficiency. We as a team sat together and decided to follow a few things, which would overcome these shortcomings and at the same time help us gauge our incremental improvement. A few things that we started doing were:
- Maintaining Google forms to log the learnings of the day. It would be as simple as finding a right way use to a certain library, or enforcing constraints to an UIImageView in the main dispatch thread, to a peculiar technical observation of a prospective client/employee made during a call
- No haphazard coding! Everyone mutually agreed to work only-n-only if a task/bug was created in the repo management system (We use Bitbucket! :)). Everyone in the team now updates her/his tasks/bugs during the day’s work.
- Every development activity is well documented and the corresponding code is well commented
- Maintaining a proper branching of the code: Planning of each phase is done, and the team maintains separate branches for every phase.
(This behavior was so natural when I used to work just as a developer; however, with elevated responsibilities I had given myself and my team a free pass. Eg: We all used to work only on the master branch for months, and multiple versions! This happens no more! :P )
Always remain cognizant of your arsenal and keep it updated!
In past many a times it happened that we configured a system and kept working on it without keeping track of the updates of libraries we were using. In a few unfortunate events it so happened that libraries we were using were no longer supported on the corresponding updated platform, and we were the deer caught in the headlights.
Now we keep a tracking matrix of the versions of our Xcodes, AndroidStudios, Djangos, Nodes etc., and the corresponding language versions, SDKs, libraries and packages. This also helps us give a have fair idea of our applications operability on the various mobile devices.
Setting up a continuous intra-team and inter-team feedback mechanisms is what makes things click
As it happens with any community/group of individuals, a clear communication channel is what keeps everyone on the same page. Bridging the communication gap (in the team and with outside world as well) if any was mandatory for us. We’ve been able to achieve this via Basecamp, Slack, Trello and BitBucket. Slack Apps have been a boon to us!
Never Stop Exploring!
“It’s a magical world let’s go exploring” — Bill Watterson
Never ever let go of the Calvin in you! Exploring things by doing them applies the same way in software development, as in life and philosophy. Every new library, every new framework, every new language have taught me things that I was unaware of before.
Einstein said, “Once you stop learning, you start dying”; and me along with my team @ NonStop & AwesomeChaps believe in this philosophy to the core. Every last day of the week we huddle together and share our learnings of the week. The learnings will continue and hopefully the corresponding sharing too 😃
- Peace \m/