Jump starting a career in software development and design

, a 5-minute piece by Dev Mukherjee Dev Mukherjee

While pursuing formal education in disciplines of software development and design, it's daunting to think of what might be expected of you in your first job. Curriculum requires you to work on smaller isolated problems (writing programs, designing isolated interfaces), mostly on your own and you might often wonder what is it that you need to know so you can become part of a team.

We've been on the hunt for software engineers and user interface designers for the past year and I thought it would be worthwhile to share our point of view.

For anyone joining a team it's all about understanding the rhythm at which group works. You are most likely going to join an existing project and be asked to work on simpler portions (while you get used to the tools and processes) before taking on heavier tasks.

Understand the tools you use

Software systems are complex organisms. When you venture out you are extremely focused on building your own application. It's very easy to take for granted the tools and infrastructure you depend on to deliver your product. It's thus very important to take time and understand the tools you use.

These are exercises that will allow you to explore what's under the hood and assist your critical thinking.

Engineering work flow

Software engineering teams use version control (I am particularly referring to Git in this instance) to collaborate and keep an audit trail of what's being pushed into the product. A product manager will rely heavily on using work flow such as pull requests, tagging to manage releases of the product.

Familiarising yourself with these concepts will allow you hit the ground running and fit right into the work flow. A good way to do get started is by using source control while working on university assignments.

In a world where infrastructure can be commanded by code, software engineering teams employ methods like Continuous Integration and Continuous Delivery to rapidly test and deliver product. A key habit that drives is Unit testing and all popular languages provide frameworks to test your code and is one of the best software engineering habits you can develop.

Leaving traces

Larger problems are broken down into smaller pieces. Systems are built over time and are worked on by multiple people. Whilst the most exciting part about problem solving is expressing your solution in code to see if it works, it's rather important to document your thought process in line.

Languages like Python have very formal definitions of documentation which not only helps your work with others but can feed into automatic documentation generation with tools like Sphinx.

Approach

It's important to get into the habit of solving problems properly rather than quickly. Spend the time upfront in thinking about a problem, research, discuss with your colleagues and come to an optimal solution. Software projects suffer immensely if poor solutions make it to market, specially on sensitive topics like security and privacy.

Portfolio

You are as good as your last project. Nothing can communicate your technical and organisational abilities better than a portfolio.

And if you are a keen developer or designer looking to join a software development team, do check out our Jobs section and drop us a line.

Open-Source at Anomaly

, a 3-minute piece by Dev Mukherjee Dev Mukherjee

Open-source software is computer software where its source code is made available by the copyright holder under a suitable license that allows others to use, change or distribute the software for any purpose.

Any user of the Internet would find it impossible to exist without the relationship with the world of open-source software. It's very likely that your favourite applications depend on open-source components. These invisible building blocks form the infrastructure that developers can build applications upon. Open-source software is in Anomaly's DNA. We have a long history of building software using open-source components and publishing large portions of our core intellectual property into the public domain.

We thrive to refine our process with every project we take on. A portion of this comes from automating parts of our software development or deployment approaches. At Anomaly, our attitude towards open-sourcing software has been to extract as much of our toolchain as possible and making it available to the public.

Around six years ago, we were looking for a way to build RESTful APIs straight on top of WSGI. Our requirement stemmed from recognising that projects of a larger scale will access several different types of databases and will run on various web servers i.e. AppEngine Standard Environment through to AWS Application Load balancers talking to EC2 nodes running Apache. We started by streamlining how we set coding standards towards building REST services. It quickly became apparent that to scale our team up we, should encapsulate our thinking in a software framework. After months of internal use, we packaged it up and published it on the—now defunct—Google Code (we migrated to GitHub later) and published it on PyPi.

Prestans has since had two major rewrites.

Attempting to find our feet in the brave new world of serverless computing, we are in the process of streamlining our DevOps processes and are building a number of utilities that expedite our development and deployment processes. This will be the topic of what we will publish in the public domain.

We are committed to open-source. We recognise the enormous amount of intellectual wealth we build upon and endeavour to contribute financially and in kind. Keep an eye on our open-source efforts on Github and our Open Source page and send feedback through Twitter.

Twine, Now in Beta

, a 1-minute piece by Dev Mukherjee Dev Mukherjee

Twine is our mouldable approach to productivity. It focuses on individuality and allows users to shape its behaviour using meta information such as tags, dates and locations. Views allow you to model processes or action lists that mimic your real life scenarios. Twine is packed with rich collaboration features that allow you to work with others while allowing them to organise these objectives however they see fit.

This week, Twine went to beta and we've already collected lots of interesting feedback to ensure we make the best productivity platform we can. There's still an enourmous amount of work to be done and we are committed to bringing a native Twine experience to iOS and Android.

We believe that Twine has a unique tangent on productivity and are offering a free usage period for early adopters who are willing to assist us in testing Twine, before we open it up to the public. Beta access is by request. If you are interested, please put your name down and we will definitely consider sending an invitation out.