During the past 20 years I’ve regularly worked closely with programmers in various roles; as an analyst, UX designer, product manager, and a customer. Often, we worked together really well. Other times it was extremely frustrating. More than once, I quarrelled furiously with them…
Over time I have tried to understand better the dynamics of software design, development and management. And I realized that, even when there is a good comprehension of requirements, many misunderstandings between clients and developers depends on a different perception of the time needed to do things. The result is that developers often work under pressure because clients (especially those who know little about software) expect developers to create perfect software at lightning speed.
I was on of those clients. I know that there are many methods, processes and tools that help optimize the work of software developers. So of course there should be no reason why a developer can’t be super-productive, understand all requirements on the fly, make forward-thinking technical decisions, grind out lines of code, continually learn new things to solve a broad range of complex problems, test what they’ve produced, debug, put into production, manage software in production, and participate in many meetings..! *ahem*
1. Reusing software
Programmers generally use a framework, code libraries, boilerplates, and templates. So before starting a new project many consult Github or Envato Marketin search of something to start with.
Thanks to the internet the availability of free, open source, and ready-made software solutions has grown exponentially – so much so that someone ironically suggested that the discipline of Computer Programming should be officially renamed “Googling Stack Overflow.”
The second optimization strategy in software development is about languages and infrastructure abstraction. Frameworks like AngularJS provide abstractions that allow you to build CRUD applications very efficiently. Cloud computing services make infrastructure and platforms needed to run our app invisible. Within a few years going from abstraction to abstraction, we have gone from virtual servers, to Infrastructure as a Service (IaaS), to Platforms as a Service (PaaS) to the Back-end as a Service (BaaS).
Most of the apps in circulation today are built by integrating various specialized services. It makes sense – why bother developing technology to manage payments from scratch when you could integrate solutions like Stripe or PayPal that already do such a great job? The same goes for many other services: SendGrid, Mailgun and Mandrill for emails, Algolia for searches, and so on. Just take a look at BuiltWith to find out how even large companies like Uber and AirBnb have been built using a variety of third-party services to deliver their hugely successful products.
Why productivity is so important for us
At Stamplay we put a lot of effort into finding and incorporating efficient strategies for optimizing software development. We do this for two reasons:
- We’re developing a tool that helps programmers streamline the creation and maintenance of their application’s back-end. Our solution provides a level of abstraction similar to that of Parse or Firebase, but adds the ability to integrate third party APIs super efficiently.
- We’re still a small team (five software engineers and myself), so to build and manage such a complex platform it’s crucial that we optimize our resources as much as possible.
We’ve learned a lot during nearly two years of working together, and I’d like to share those lessons with developers wanting to produce more with less effort (and subsequently enjoying a better quality of life; maintaining personal relationships, having time for exercise and hobbies, resting during the weekends… etc).
In the next three posts I’ll expand on our thoughts, explaining how we (try to) work efficiently in more detail. I’ll cover the following topics:
This post was originally published on Stamplay Blog.