Categories
Community

Language Communities; Who leads the way?

The choice of programming language matters deeply to developers because they want to keep their skills up-to-date and marketable. Languages are a beloved subject of debate and the kernels of some of the strongest developer communities. They matter to toolmakers, too, because they want to make sure they provide the most useful SDKs.

size of programming language communities in 2023

It can be challenging to accurately assess how widely a programming language is used. The indices available from sources like Tiobe, Redmonk, Github’s State of the Octoverse, and Stack Overflow’s annual survey are great but offer mostly relative comparisons between languages, providing no sense for the absolute size of each community. These may also be biased geographically or skewed toward certain fields of software development or open-source developers.  ​

The estimates presented here look at software developers using each programming language globally and across all kinds of programmers. They are based on two pieces of data. First is SlashData’s  independent estimate of the global number of software developers, which was published for the first time in 2017. According to it, as of Q1 2023, there are 35.6 million active software developers worldwide. Second is the large-scale, low-bias Developer Nation Global survey which reaches tens of thousands of developers every six months. In these surveys, devleopers are  consistently asked about their use of programming languages across 13 areas of development. This gives a rich and reliable source of information about who uses each language and in which context. 

JavaScript remains the most widely used language. 

For the 12th survey in a row, JavaScript continues to take the top spot for programming languages, with 20M active developers worldwide. Notably, JavaScript is still experiencing growth, with a further 2.6M developers joining the community in the last 12 months. JavaScript’s lead is unlikely to be challenged in the near future, as its community has almost 3M more developers than the next closest languages. Moreover, JavaScript’s popularity extends across all software sectors, with at least 20% of developers using it in their projects. 

“Close to eight million developers joined the Java community in the last two years.”

In 2020, Python unseated Java as the second most popular programming language, but in Q1 2023, Java returned to just matching Python, with both languages now counting just over 17M developers. Java is one of the most important general-purpose languages, and although it is over two decades old, it has seen incredible growth over the last two years, gaining close to 8M users. This corresponds to the highest growth in absolute terms across all languages. Java’s growth is not only supported by traditional sectors such as cloud and mobile but also by its rising adoption among AR/VR developers, in part due to Android’s popularity as an AR/VR platform. 

Despite Java catching up, Python keeps adding new developers. However, in the last 12 months, only 1.3M developers joined the Python community, compared to the massive 5.6M developers who joined between Q1 2021 and Q1 2022. A major driver of Python’s growth was the rise of data science and machine learning, where 70% of developers involved were using Python in Q1 2022. However, this has decreased to 60% in Q1 2023, with other languages, such as Rust, Java, and Mathematica, receiving small increases and likely reducing Python’s growth. ​

The group of major, well-established languages is completed with C/C++ (13.3M), C# (11.2M), and PHP (8.8M). PHP has seen the second-slowest growth rate over the last 12 months, growing just 11% and adding 0.9M developers to its community. PHP is a common choice for backend and web developers but has seen decreasing popularity. 

PHP was used by almost 30% of all developers in Q3 2020 but by 25% of all developers in Q1 2023. This decrease in popularity is particularly apparent amongst web developers, for whom it has gone from the second most popular language in Q3 2021 (34%) to the fourth most popular language (25%) in Q1 2023, behind JavaScript, Python, and Java. Despite PHP 8 addressing many of the concerns developers had expressed about PHP, perceptions of it being insecure or outdated may persist.​

C and C++ are core languages in embedded and IoT projects, for both on-device and application-level coding, but also in desktop development, a sector that accounts for almost 45% of all developers. On the other hand, C# has maintained its position as one of the most popular languages for games and desktop applications. Overall, C/C++ added 2.3M net new developers in the last year, while C# added 1.4M over the same period. 

ranking of programming languages

Kotlin’s growth is beginning to slow

In previous editions of this report, Kotlin and Rust were identified as two of the fastest-growing language communities. If Kotlin’s growth continues, it will soon overtake PHP and join the ranks of the most popular languages. Kotlin’s growth has been largely attributed to Google’s decision in 2019 to make it the preferred language for Android development. It is currently used by 19% of mobile developers and is the third most popular language in the space. However, Kotlin may be showing signs of slowing its exceptional growth. Kotlin now has a community of more than 5.3M developers and has added more than 2.5M developers in the last two years. However, in the last year, there has only been an increase of 0.5M developers. Kotlin’s explosive growth may have resulted from a high demand for developers with Kotlin experience to fill a market need that may be approaching a level of market saturation. Despite Google’s preference for Kotlin, the inertia of Java means that it is still the most popular language for mobile development and still experiences immense growth.

“Rust has more than tripled the size of its community in the past two years”

Rust has more than tripled the size of its community over the past two years and currently has 3.7M users, of which 0.6M joined in the last six months alone. Rust has overtaken Objective C in the last six months and is the 11th most popular language in our survey. Rust has seen increased adoption in IoT, games, and desktop development, where it is desired for its potential to build fast and scalable applications. Rust was designed to handle high levels of concurrency and parallelism. Thus it can handle increasing amounts of work or data without sacrificing performance. Furthermore, Rust has built a loyal community of developers who care about memory safety and security.

Swift currently counts 5.1M developers, adding more than 1.6M net new developers over the past year. This growth continues to stem from Apple making Swift the default programming language across the Apple ecosystem, which has the effect of phasing out the use of Objective C. Despite this, Objective C has also shown strong growth, adding 1.0M developers in the last year alone, resulting in a community of 3.4M developers. This is primarily through its use among IoT developers, who are increasingly turning to it for their on-device code, as well as a growing number of AR/VR developers. Nonetheless, Objective C has fallen behind Rust, whose more modern approach may be more appealing to developers.​

Go and Ruby represent two of the smaller language communities that are important in backend development, but Go has seen substantially more growth over the last two years. Go’s developer community has more than doubled in the last two years, adding 2.3M new developers to its population, which stands at 4.7M developers. Similarly, Ruby has added 1.0M users to its community of 3.0M developers, showing impressive growth but trailing further behind Go. 

“Lua has added almost 1M developers to its community in the past year”

In the past six months, Lua has overtaken Dart to become the 14th most popular programming language. Lua has shown massive growth over the past year, going from 1.4M developers in Q1 2022 to 2.3M in Q3 2023. Lua is an alternative scripting solution for low-level languages, such as C and C++, and has seen more developers in IoT, games, and AR/VR picking it up. This could mark the beginning of Lua’s momentum and see it become increasingly popular, especially as the IoT and AR/VR spaces continue to grow. Dart has seen steady but slow growth over the past two years, predominantly due to the Flutter framework in mobile development filling a useful niche. However, with 13% of mobile developers currently working in Dart, a decrease from 15% in Q1 2022 may see Dart’s growth remain low, and its place within mobile development remain a minority language.

Categories
Community

Where does Security sit in Early-Stage Software Development: the Shift Left Approach

The average cost of a security breach in a hybrid cloud environment is estimated at a staggering $3.6 million making it critical for organisations to make software security one of the most important priorities.

Cisco’s most recent report, based on the findings from two SlashData global surveys that targeted enterprise developers, uncovers developers’ exposure to API security exploits, their outlook on security, and how they use automation tools to detect and remediate threats. Here is a detailed preview of the report:

  1. Enterprise developers focus on prioritising security from the early stages of development

There is a significant rise in security threats; in fact, 58% of enterprise developers have had to tackle at least one API exploit in the past year alone. And to make matters worse, nearly half of them have experienced multiple API exploits during that time.

As modern applications increasingly rely on microservices, securing the APIs that connect these services becomes even more crucial. It is also true that juggling multiple APIs can make staying on top of security challenging. That’s why it’s essential to prioritise security from the very beginning of development to avoid wasting time and effort on reworking code and dealing with exploits later on.

Obviously, breaches should be ideally prevented. But if they do occur, organisations must be set up to act swiftly. According to the report, ,only one-third of enterprise developers can resolve API exploits within one day of a breach.

Security in Early-Stage Software

By treating security as a top priority from the start of the development lifecycle, organisations can increase preparedness and avoid costly mistakes down the road.

2. What is the right time to address security concerns?

Shift-left security is all about strategically placing security at the forefront. The cost savings from addressing security concerns early in the development process can be significant compared to dealing with security issues during deployment or after a security breach. In fact, according to the data, many organisations are already putting significant effort into identifying security vulnerabilities during the early stages of development, and as a result, have implemented additional security measures.

How do enterprise developers address security?

Security in Early-Stage Software

3. Relying on automations can account for faster, and frictionless operations

During the surveys, developers were asked whether they use automated approaches to security, such as scanning tools or automated fixes. 

The most likely group of developers to adopt automated security approaches are key decision-makers and team leads who influence, manage, or set the strategy for their teams’ purchase initiatives (90%). 

This probably indicates that many developers still don’t use automation tools for security. However, it’s important for developers to use the best tools when it comes to the production of secure code.

Security in Early-Stage Software

While more than half of enterprise developers are already shifting left, less experienced developers are still behind. Automation appears to be core to the shift-left approach, with two-thirds of developers using automated security tools. 

Nevertheless, automation is not favoured by developers who wish to acquire more experience. This highlights a need for balancing the need for learning with the importance of using the best security tools available.The organisations that are set up to go that way are very likely to reap the fruit of shift-left security.  

Categories
Community Tips

DevOps 101 for a Dev Who Doesn’t Like Ops

(To the tune of The Fresh Prince of Bel-Air

— 

Now this is a story all about how 

DevOps improves software development, here and now 

And I’d like to take a minute, just sit right there 

I’ll tell you why DevOps should make developers care 

— 

In the world of software, development and ops 

Often work apart, and it’s easy to flop 

But DevOps brings them together, for a common goal 

To make software faster, better, with more control 

— 

Now that the sick rhyming has captured your attention, let me tell you why even as a developer with little knowledge of ops knowledge, I’m a big fan of DevOps. It’s so time-saving that I cover the basics, even when I’m the sole developer on a project. Who doesn’t like saving time?  

The basics of DevOps 

So, what is DevOps? At its core, DevOps is a culture and set of practices that aim to break down the barriers between development and operations teams to improve collaboration and efficiency. It involves automating and streamlining the software development process, from code creation to deployment and beyond.  DevOps is not just a set of tools or processes, but a way of thinking about software development. It’s about creating a culture of collaboration, communication, and continuous improvement. With DevOps, developers and operations teams work together to build, test, and deploy software faster and more reliably. 

Additionally, DevOps promotes collaboration and communication between different teams, which leads to a more efficient and streamlined development process. By breaking down the silos between development and operations teams, everyone is on the same page, working towards the same goal. This results in faster and more reliable releases, as well as overall better quality of the product. In short, DevOps is a time-saving and collaborative approach to software development that ultimately leads to better outcomes for everyone involved. 

Why should developers care about DevOps? 

You might be wondering why, as a developer, you should care about DevOps. After all, isn’t that more of an operations thing?  Well, the truth is that DevOps is highly relevant to developers as well. According to the Developer Nation Survey 23 results, DevOps adoption keeps increasing (from 47% to 56% in 1½ years), while most of the implementation work is done by software developers themselves, with an earlier Developer Nation report mentioning only 5% of the DevOps practitioners being DevOps specialists.

In my mind, this makes sense. DevOps is, at its core, a culture of breaking down the walls between devs and ops people. While a specialist can be invaluable in complex implementations, or to help kickstart a culture, the culture itself should be the responsibility of generalists. By adopting DevOps practices, you can save time and streamline your development process. You can avoid manual steps in building and deploying your code, get test results without running tests, and have your changes live in production far faster than you would without DevOps.  Sure, setting up version control, pipelines, testing, and deployments takes some effort. But more often than not – even sometimes when you’re the only one working on the project – the investment is worth it! 

DevOps exists to make your life easier 

This is the bottom line – DevOps is not there to create a new profession of DevOps consultants (just like Agile Software Development isn’t there to ensure Agile Coaches make their bread). It’s there to make the lives of devs and ops people easier.  By adopting DevOps practices, whenever I am actually working with Ops, DevOps makes the collaboration easier as everything is traceable, often reversible,  and even easier to document. This means that if there are any issues or bugs, we can quickly identify where the problem occurred and take steps to fix it. 

According to the Q3,2022 Pulse report DevOps implementation witnesses more instrumental action from the programmers and software developer community with a 45.6% involvement, while the supervisory roles reflect the participation of less than 12% with Tech/engineering team leads at 11.2%, architects involvement at 10.7% and the C-level CIO/CTO and IT management roles at the lowest 10%. Computer and data science students show some practical learning involvement with 13.3%.

DevOps also encourages frequent communication between developers and operations, which helps to avoid misunderstandings and ensures everyone is working towards the same goals. The result is a more efficient and effective development process, with better quality software releases and happier customers. And even when I’m working by myself, DevOps makes it easier to deploy, maintain, and scale my apps. This collaboration can help to identify and fix issues earlier in the development process, reducing the risk of costly delays and downtime caused by issues discovered during deployment or after release. 

Just recently, I was building a .NET MAUI project – my first one – and realised I only had a rough idea of how to build, test and publish an app, and not even that on how to distribute it. The obvious solution was to let someone else figure the details out for me. Luckily, I have someone who knows more about this stuff – namely, GitHub.  Getting the basics to function using GitHub and Visual Studio App Center took me about an hour. GitHub Actions would take about 15 minutes to ship my code – from checking in to having a download available on App Center – and I don’t have to do anything!  I should probably add some tests to the build process, but hey, I’ll add those right after I’m done with the documentation. If you want to read more, the whole article is here.

How to get started? 

Here are some simplified steps to get started with your journey as a DevOps-savvy developer: 

  1. Automate everything you can: Automate your build, testing, and deployment processes using tools like GitHub, Azure DevOps, Jenkins, TeamCity, and GitLab.
  2. Collaborate with Operations: Work closely with your Operations team to understand their needs and to ensure your code runs smoothly in production. 
  3. Embrace Continuous Improvement: DevOps is all about continuously improving your development processes, so always look for ways to streamline and improve your workflows. 
  4. Learn by Doing: DevOps is a hands-on approach, so start by experimenting with new tools and practices on small projects. 
  5. Prioritise Communication: Effective communication is essential to DevOps, so ensure you regularly communicate with your team to ensure everyone is on the same page. 

And remember, DevOps is a journey, not a destination.  By taking small steps towards automation, collaboration, and continuous improvement, you can gradually incorporate DevOps practices into your development workflows and reap the benefits of faster, more efficient software development. Don’t get too attached to any one tool – plenty of tools exist, and you can get tremendous value from many. 

Bio: Antti Koskela is a Microsoft MVP trying to stay current on what’s what in the Azure and .NET world, and a Developer Nation Dev Committee member.

Categories
Tips Tools

Integrating Test Automation In Small Tech Business: Advantages And Disadvantages

Software testing verifies that the software or product meets the technical requirements of the project and works as expected. It checks for bugs and errors to ensure that the product delivers an ideal user experience. Software testing is vital to the success of the project. However, it could be time-consuming and stressful to execute without using automation tools. Simply reviewing the entire project manually could be a massive burden on the testing team, especially in the case of heavy-duty software.

It has become increasingly important for small tech businesses to integrate software automation testing in their development process. Testing automation tools allow testers to perform the tests with greater accuracy and efficiency. The tools handle the bulk of the grunt work so the testers can devote their time and attention to more critical tasks. 

This article will discuss the advantages and disadvantages of test automation for small businesses.

Advantages of Test Automation for Small Tech Businesses

Test automation can help small tech businesses in various ways. For starters, it can help them to streamline their operation and improve the quality of their product or service. Here are some more advantages of test automation to small businesses.

Increased Efficiency 

Automation testing helps the testing team to save time and be more efficient in the testing process. For instance, In manual testing, the testing process is entirely left to the testers, so testing can only happen during working hours. On the other hand, a test automation approach does not require manual intervention, so it can be executed around the clock; the testers can set it on the schedule, thus saving  time and getting conclusive test results faster.

Test automation could also be run on multiple devices simultaneously, further speeding up the testing process and reducing the testing time.

Improved Accuracy 

Small tech businesses looking to perform more thorough testing can benefit from the improved accuracy of test automation. During manual testing, you have to rely on the expertise and exposure of the testers. They could make mistakes, especially when they have to perform repetitive tasks. The quality of the tests could decline as the project becomes complicated. On the other hand, automation tests are highly repeatable and consistent; you can run automated tests severally without any reduction in thoroughness.

Test automation can reduce the risk of human error so you can get the best quality results.

Better Coverage 

Performing end-to-end tests on lengthy projects can be challenging with manual testing. The testers and developers may be unable to efficiently cover all memory contents, data tables, internal program states, and file contents to ascertain if the software works as expected. 

With test automation, you can increase the depth and scope of tests to review all parts of the software. It can help you to create more complex test cases, test more features, and improve the overall quality of your software.

Early Identification of Issues 

Test automation can help you to detect bugs and errors earlier in the development process. This helps to speed up the development process while ensuring that smaller problems are attended to before they transform into more complicated issues. 

The earlier the defect is identified, the easier it is to fix it and the more cost-effective it is to resolve the issue. According to IBM Science Institute, a bug discovered in the testing phase costs fifteen times more than a bug discovered in the design phase, and a bug discovered in the implementation phase costs a hundred times more to fix than a bug in the design phase. You will save more money if you can uncover all the hidden errors earlier in the production process.

Disadvantages of Test Automation for Small Tech Businesses

As the famous saying goes, “every coin has two sides”. The same goes for test automation. Test automation may offer some disadvantages for small businesses. Here are some of the possible disadvantages of test automation.

Initial Cost 

Small businesses may be unable to afford the high initial setup and implementation costs. However, this depends on the scope and complexity of the project. Larger projects require more time and resources, which may cause a tremendous financial strain for small tech businesses.

Maintenance Cost 

They also have to deal with the cost of maintenance. Automated tests must be constantly modified and maintained as the product changes to ensure that they continue to function effectively. For example, suppose there is a modification to the software’s user interface. In that case, the testers must update the test scripts to reflect the new change. This can be time-consuming for the testing team.

Lack of Flexibility 

Automation testing is not as flexible as manual testing. As automated tests are designed to test specific scenarios or situations, they may have difficulty adapting to changes or unexpected results.

Not Suitable for Open-Ended Testing

Open-ended and exploratory testing involves randomly testing the products to check how they behave under different conditions and uncover unforeseen issues. Automated tests have a defined purpose, making them unsuitable for tests that need to be performed randomly.. 

Categories
Community

Best Project Management Software for Freelancers in 2023

When one works on a regular job, one has specific external frameworks that control productivity. On the other hand, freelancers do not have any frameworks, so a person either has the superpower of self-organisation or, sooner or later, finds some specialized project management software to use.

It seems as if freelancing is about freedom. Freelancers can choose their projects, regulate their time and plan their future. However, freelancing is just the opposite, accurate organisation and planning. A freelancer must manage work without outside help or guidance to make good money, stay productive, and avoid falling into an extreme workload.

The second stakeholder in streamlining a freelancer’s work is the client. Communication between the two parties must be managed for sustainable work and productive results. The best way to do this is to implement some management.

Why We Need Project Management Software 

A freelancer’s work can produce both excellent results and total headaches. 

When working with a freelancer, the client, for his part, should understand that he is hiring a specific specialist, such as a designer, an accountant, a copywriter, a developer, etc. More often than not, the freelancer will know precisely how to draw design, reconcile debit and credit, and write text or code. Usually, he cannot or is not required to draft the terms of reference, to be an excellent negotiator or a manager. At the same time, clients want the collaboration with a freelancer to include the following:

  • A high level of negotiation,
  • Fulfillment of obligations,
  • Control of work deadlines.

In companies, these functions are often performed by different people or even departments. The freelancer does everything himself. He can be the most talented performer and, simultaneously, a lousy negotiator, supervisor, and manager. In such cases, project management software comes to the rescue.

Key Criteria for Selecting Project Management Software for Freelancers

Today’s digital project management software for freelancers can solve many aspects of the interaction between the client and the contractor. There are plenty of them, and they are all suitable for one task or another. Let’s discuss the criteria for selecting tools worth paying attention to:

Cost and availability

Availability is the main criterion for choosing a tool for a freelancer. Many of them are free and have a wide range of functions. Therefore, payment is implied only if the user wants to apply additional features.

Budget tracking

Freelancers often work for many different clients with hourly rates, so being able to track hours, payment, or even the cost of a project is essential.

Communication

A unified communication system is critical because chaos occurs when some tasks are sent to messenger, others to e-mail, etc.

Time management

It’s about the importance of matching tasks to a deadline. The software development should have calendar functions, scheduling, reminders, and, if necessary, a time tracker.

Collaboration tools

For many remote activities, it’s vital to be able to share information in real-time to continue the course of the project. It’s also essential to track the progress of tasks, segmenting them by status, deadline, and priority.

Reporting

Automated reporting allows the creation of a comprehensive understanding of the work process, analyzes it, and identifies problem areas.

Best Tools in 2023

Asana

This task manager is convenient when there are a lot of projects. The program is intuitive, and tasks start quickly. A user can assign each task a priority, an executor, and a time limit. Tasks are placed according to projects. For convenience, the user can give a detailed description of the task and subtasks in the “description” section. When the team works on tasks in Asana, they get all the news about updates in the feed.

Freelancers just starting to manage projects can take advantage of Asana’s basic free plan, which includes an unlimited number of tasks, projects, and storage. Up to 15 people can work together on this plan. A mobile version is also available.

Basecamp

It is one of the most popular project management software. The advantages of Basecamp are its simplicity and distribution of tasks and its intuitive interface. In addition, the software integrates into popular development services and allows you to create your add-ons.

Unfortunately, Beyscamp has a partially free version. However, a trial period will allow you to see if the software is convenient for the needs of a particular freelancer. 

ClickUp

ClickUp is a versatile project management software. The cloud-based tool allows you to work smoothly in real time. It includes all necessary functions: task creation and management, internal communication, documentation and reminders, and integration of third-party applications. The tool allows you to assign people responsible for tasks, work with repetitive tasks, exchange comments between team members, and so on. In addition, the software cares about the security of free users and offers them two-factor authentication.

The application has a free version with somewhat limited functionality, which is enough for freelancers. 

Insightly

The feature of this project management tool is that it allows for managing contacts, tasks, events, and resources. In addition, it integrates with the most popular collaboration services.

Insightly has a free version and a 14-day trial period for paid packages.

Monday.com

It is an excellent tool for freelancers with minimal budgets for operational processes. It also provides the ability to visualize processes in the form of charts and tables in one of its low сost packages, which for many looks pretty convenient. In addition, the service has more than 70 templates for tasks of various kinds. Prepared board templates greatly facilitate the work because they already have a thought-out logistic algorithm for managing many tasks.

Thanks to a simple, intuitive interface, it is easy to work in, and the mobile version allows you to work on a smartphone or tablet.

Notion

Notion is a great all-in-one program for individual freelancers, as it allows them to create tasks, notes, and a mood board for art. 

The tool is completely free for individual use. However, a free limit of 1,000 blocks is available if you need to use it for teamwork. That’s enough to see if Notion is suitable for use.

Solo

Solo is a task manager literally made for freelancers. Because in addition to the standard features of many management software, Solo lets you view a list of deadlines, overdue invoices, invoicing projects, average hourly rate, and all major project data and then skip to the details of each aspect. You can send electronic invoices to your clients and view when they are due, overdue, or due to be sent. Turnover reports for the current year, month, or week are also available.

The program is available on iOs for $19 a month, which is not very cheap for freelancers, but it can provide a lot of helpful information for scaling.

TickTick

TickTick is an indispensable to-do list app for a freelancer who works on different platforms. The app also has a web version. Tasks are created quickly and intuitively. The subtasks have as many features as the tasks. The program’s main advantage is the distribution lists with the ability to output tasks from them to a common list of tasks. It helps to distinguish operational work issues, household chores, and long-term tasks.

The application has a free version and a “premium” version. Feature-wise, they are almost similar, and the free one is reasonably competent in its functionality.

ToDoist

It is the task manager with one of the broadest functionalities for freelancers. It is available as an app and a web service. In addition to the standard features for such applications, ToDoist has a recurring deadline feature for tasks. The user can create priorities and delegate tasks to performers. To make sure users remember the charges for the day, ToDoist will notify each of them. Graphs clearly show how productively the user spent his day/week. ToDoist highlights several types of services for integration: automation, communication, email, file management, scheduling, productivity, and time tracking. 

ToDoist works on a subscription basis. There are three plans: Free, Premium, and Business.

Toggl Plan

It is a network solution for task scheduling, project planning, and team management. Tasks are created through a “drag-and-drop” interface, which is very convenient. Marking assignments as completed helps track progress and increases accountability in the team. Users can see all the tasks that need to be completed on a single project or get a simple overview of all the tasks that team members are working on. In addition, the Toggle Plan allows for project budgeting, risk management, and personal and team performance tracking. Conveniently, the service is available online and offline.

The free plan allows one to form a team of up to 5 people, create an unlimited number of projects, etc.

Wrike

Wrike allows the creation of conditions for cooperation with high interaction. The program has excellent usability, good logistics, and a friendly interface. It integrates with third-party services. Everything is intuitive. No extra clicks are required to perform the targeted action. Suitable for managing remote employees and freelancers. Wrike contains a network schedule and project reports. It allows setting reminders and logging task times.

The tool is available for free for novice teams. The free plan includes mobile and desktop versions, project management, and a Kanban board view. Paid plans include Team, Business, Enterprise, and Pinnacle.

Have you used any of these tools? What is your opinion please write in the comments.

Categories
Tools

An Agile Software World

Since the emergence of the first agile software development methods more than 20 years ago, development teams around the world have undergone a significant cultural shift. The traditional waterfall approach to running software projects sequentially has been gradually replaced by iterative project management styles. This has enabled organisations of all sizes to scale successfully by remaining resilient in a business environment full of uncertainties. Agile methodology appears to be transforming companies across sectors, but is it really the dominant trend in the software industry nowadays? And if it is, which particular implementations of agile are the most widely used by developers?

 

To gain more insight into the above questions, we asked 11,700+ developers in our latest Developer Economics survey about the project management methodologies they follow in software development. The data we collected provides clear evidence that agile is indeed the most commonly adopted practice in the software industry.

Agile project management

Agile is an umbrella term used for processes like Scrum and Kanban that emphasise short release cycles, rapid response to changing requirements and continuous improvement through regular customer feedback, as described in the Agile manifesto of 2001. According to our survey data, more than half (58%) of developers say they follow a project management methodology that can be classified as agile.

By comparison, the once ruling waterfall methodology is currently used by only 15% of developers. Waterfall’s biggest advantage, i.e. its sequential approach, is also its greatest limitation: in projects where the goals are not clear from the beginning and requirements change continuously, waterfall fails to adapt and deliver results quickly.

 

SCRUM IS LEADING THE AGILE REVOLUTION

Scrum was conceived in the mid 1990s as a response to the shortcomings of waterfall and is now the most popular project management methodology, followed by 37% of developers. As a framework that puts the core principles of agile into practice, Scrum enables teams to break down large, complex projects into a series of smaller iterations (or sprints) and ship high quality products faster and more frequently.

Kanban is another prominent agile project management framework, although its popularity is significantly lower – nearly half of Scrum’s (20% vs 37%). The two methodologies share some of the same core values but have very different implementations. Most notably, Kanban is lighter on structure as it’s not constrained by fixed-length iterations, but instead it prioritises continuous delivery of work to customers (even multiple times per day) as long as the capacity of the team permits it.

Only 6% of developers blend the concepts of Scrum and Kanban into Scrumban, indicating that agile hybrids are not common. Agile-waterfall hybrids, in contrast, are the second most popular choice for developers (21%). This is most likely a sign that many organisations remain skeptical towards agile development and prefer a slower transition to it by mixing some of the less controversial agile techniques with the traditional waterfall method.

Other well-established frameworks such as Feature-driven development (FDS), Extreme programming (XP) and Lean are used by about 10% of developers, whereas Adaptive software development (ASD) and Dynamic systems development method (DSDM) – both outgrowths of the early Rapid application development method – appeal to more niche audiences. Interestingly 23% of developers don’t use any specific methodology in their projects, although – as one may expect – it’s mostly amateurs who do so (40%) and to a much lesser extent professionals (17%). Another 19% of developers (18% of professionals) do not follow any specific project management process for some of their side projects, which in most cases are hobby endeavours.

Our data reveals that developers tend to follow multiple methodologies across their projects (2.7 on average), with Scrum being the most frequently co-used framework along with other methodologies. This implies that Scrum often acts as a “touch point” for development teams landing on the world of agile or as a starting choice before transitioning to less structured agile processes. For example, 66% of developers using Kanban and 57% using XP also use Scrum, as opposed to only 36% and 13% of Scrum followers also using Kanban and XP, respectively. Among developers following the waterfall model, more than 40% also use either Scrum or an agile-waterfall hybrid (like Scrummerfall) while the adoption of any other framework is below 25%. It seems that Scrum’s simplicity, clearly defined roles and timeboxed nature attract development teams who want a smoother transition from traditional waterfall to more flexible approaches.

Agile_Software_World

You can read the latest full State of the Developer Nation report here, and help shape the trends by taking the 18th Developer Economics survey here

 

Categories
Community

Calling All Developers to Shape the Future of Software Development

The latest Developer Economics survey is now live, ready to measure the pulse of the developer ecosystem, helping the world understand developers and vice versa. We are calling all developers to shape the future of software development.

Here are a few facts about our developer surveys:

    • This is the 17th edition of the semi-annual Developer Economics surveys.
    • It is supported by the leading developer communities and technology vendors around the world: Amazon Alexa, Azure, ARM, Connected London, Intuit, Here, Digital Ocean, Nutanix, DZone, Hacker Nest, Heroku, Intel, Microsoft, Mozilla, Pivotal, VMWare, Salesforce, Samsung, SAP, Sitepoint, and more. However, it is run by the independent analyst firm /Data. (https://www.slashdata.co/)
    • We reach over 40,000+ developers in 167 countries annually.

Who is this for? Who will shape the future of software development?

Software developers of all profiles including professionals, hobbyists, and students who work across all major areas: mobile, web, desktop, cloud, IoT, AR/VR, games, machine learning & data science.

What has changed in the survey?

  • We have redesigned our questionnaire to capture all trends & insights related to the developer ecosystem.
  • Developers can now sign-up for a global, independent, ever-growing community.
  • We have a new Point System. Developers can earn points through several actions and unlock exclusive content and prizes.
  • The survey theme. It’s now easier to walk through the questions with minimum distractions. That said, we try to make the survey taking as fun as possible, so that survey participants can enjoy a few fun facts throughout their experience.
  • We want to hear the true developers’ voice so we reward them with amazing prizes, gadgets, licenses, etc.
  • For each completed response to the survey, /Data will donate USD $0.1 to the Raspberry Pi Foundation to support the developers of tomorrow access tools and learning courses.
  • There is a revamped Referral program available for all survey takers. Sharing is caring!

& What has stayed the same?

  • It features questions that cover developers’ level of coding skills, favourite programming languages, technologies used for work/hobby, go-to spaces for learning and resources, as well as preferred tools for specific areas of development: mobile, web, desktop, cloud, IoT, AR/VR, games, machine learning & data science.
  • We still care about learning and giving back, on top of helping devs
  • Available to developers around the world in English, plus 8 other languages: Chinese Simplified, Chinese Traditional, Spanish, Portuguese, Vietnamese, Russian, Japanese, Korean.

For any additional information regarding the Developer Economics Survey, feel free to contact the Developer Economics team at community@developereconomics.com.

Developer Economics survey is now open, inviting all developers to take the survey and voice their opinions about platforms, apps, languages, APIs, revenues, dev tools, and more.

Are you a developer? Have your say!

Join us today!

Categories
Business

A developer’s career path: How to navigate between product & custom software development

The booming IT industry attracts more and more people by offering tremendous job opportunities and compensation well above the average level – according to the U.S. Bureau of Labor Statistics, in 2015 the median annual salary in IT was twice higher than the national rate. While the IT staff headcount increases dramatically (by 48% in the US and 28% in the UK in 2015, as stated by CompTIA), building a successful career in this dynamic industry requires more than sufficient knowledge of technologies and advanced programming skills. Without a thought-out career strategy that implies progression, one day a developer is likely to find themselves stuck in a dead-end job.

We suggest building a personal career roadmap while leveraging every learning opportunity. An indeed effective way to achieve the goal is to find the balance between experience in product and custom software development companies. Here are the tips on getting maximum valuable knowledge and skills with both types of employers.

A product company to master technical skills

Become a team expert. Stability is what appeals most about starting a career at a large product development company. Developers can work for as a many as 10 years on one product, bringing it to perfection. At this career stage, the underlying opportunity for programmers is to master a particular technology and become an expert in their team or even the entire company. A deep technology experience acquired through time will contribute to a developer’s professional competitiveness in case such a narrow specialist is required by other companies as well.

On the other hand, exactly this narrow specialization is likely to block career growth. Staying for too long in the same position can lead to the stagnation of your skills and pay. In addition, at a big product company the customer-centric approach is mainly adopted at the upper management level, while developers focus more on implementation and efficiency rather than on customers’ business needs. As a result, most developers grow biased towards technicalities without understanding a bigger picture.

Learn to keep it universal. Targeting an entire market segment rather than individual customers makes out-of-the-box software developers think universal in order to come up with products that can be used by a range of companies with similar needs. If you decide to continue your career in custom software development, the vision gained through such an experience will pay off by helping to avoid too narrow thinking while implementing technical solutions.

Grow as fast as the business. A dynamic product company is an ideal environment for a fast career growth if you show the required competencies and are ready to work overtime. As the alternative to a salary, a startup employer can also offer revenue sharing for compensation. This can work fine if the startup makes it, or can leave you broke if it doesn’t.

Stay on the cutting edge. Learning never stops for developers as technologies keep evolving. In the cutting-edge tech environment of product companies, developers can’t help but keep up with innovations in the industry.

The bottom line: Despite their in-depth technological skills, developers who reduce their experience solely to product development can get too far from real-life market needs to get promoted. To overcome this challenge, try getting into the habit of stepping beyond the code and putting yourself in the shoes of marketers or salespeople who actually push your product to the market.

A custom software development company to understand the market

Gain diverse development experience. While being a specialist in a particular technology, a developer is more likely to build a successful career if they have understanding of and hands-on experience with different technologies. Every custom software development company stimulates programmers to learn more technologies and tools, as well as gives opportunities to acquire relevant skills while working on diverse projects.

Understand the customer, market, and industry. In the end, be it a product or a custom solution, software is first and foremost a tool to solve a customer’s challenge. To get promoted to a software architect or a CTO, developers have to learn to see software the way customers do. Get used to asking yourself: How well does the software fit business needs? how cost-effective is it? how well does it integrate with other software? what makes it more usable than competitors’ offering?

At a custom software development company, programmers get the understanding of the customer’s needs first-hand, with no additional research required. As customers often come from different industries, you also get a precious knowledge of their domains, which is hardly possible to acquire in another way.

Master soft skills on the go. The trickery of software development is that it’s indeed a team business that brings together extremely clever but largely introverted minds. When less proficient programmers get promoted quicker than their more technically experienced colleagues, the clue is in the soft skills they manage to nurture at work. The most cited ones are communication skills and responsibility.

Engagement in custom software development allows to develop proficient communication and problem-solving skills, as developers get a chance to communicate with diverse customers across time zones and cultures. A highly qualified developer, such as a software architect, not only understands how technology can solve a customer’s problem but can effectively communicate this vision to the team that will bring the project to life. By learning to effectively interact with all the parties involved in a solution delivery – the team, the product owner, the sales people, etc., a developer gets the communicative competencies required for a managerial position. The ability to undertake responsibility should be also developed and manifested over time. Therefore, it’s important to keep taking on more and more responsibility, first, for the design of smaller elements, then for larger ones, until you get capable of supervising a technical design for the entire solution.

The bottom line: With a wide range of projects, custom software development companies offer opportunities for gaining industry and market understanding, nurturing diverse technical competencies and filling the gaps in soft skills required for a career growth. Yet, with too much orientation on the needs of particular customers, watch out for the problem-solution trap. For this, learn how to recognize similar problems of customers and use best practices acquired while working at previous projects.

Learn to navigate your career path in between

Product and custom software development companies alike provide unique career advantages, so the question is not which one to choose but how to combine experience with both for a bright career. There are at least two strategic options:

The custom software-to-product strategy. A developer starts with 2-3 years at a custom software development company so as to gain understanding of industries and customers, as well as diverse technical experience. Then with the customer-oriented approach deep in mind, they become a more valuable candidate and can move to a position at a higher level at a product company. While being employed with a product development company, the developer continues to master technicalities and complements their vision with a universal approach to software. This makes the developer a reasonable candidate for further promotion.

 The product-to-custom software strategy. First a developer gains a deep technical experience either at a cutting-edge technological startup or, ideally, at a stable product company for about 2 years. Working in the corporate environment first will teach them how to do business at a big scale, which is hardly achievable at a startup. Either way, upon getting a solid technical background and getting used to address similar challenges of diverse customers with a single product, the developer can move to one of the leading custom software development companies. With the previous product development experience, they will quickly climb the career ladder, as long as they keep enriching their understanding of the market through participation in a range of projects.

Afterthought

Combining experience in both areas, a developer becomes a competitive specialist and elevates the chances of employment in (or promotion to) a higher position. For sure, it’s possible to stay self-employed or start your own business right away. Yet, the deal appears too risky with the claimed 80-90% percent rate of startups fails. Besides, in the startup environment, the CEO’s, CMO’s and developer’s responsibilities overlap, which means that to succeed, you will need to demonstrate technical and soft skills alike. With such a solid background, it will be easier to start your own business and survive on the market knowing what product the market needs, as well as how to deliver it. In due course, all these will make you look more reliable in the eyes of investors and raise the chances of staying in the 10-20 % of the startups survived.

 

This post was provided by ScienceSoft, a US-headquartered custom software development company with 450+ IT professionals located internationally. With over 27 years of IT business experience, ScienceSoft is a recognized partner of IBM, Microsoft, Oracle and EPiServer.

 

Categories
Tools

Agile tools for the Samurai Coder

This post is not meant to help you understand agile methodologies. A simple Google search will be enough to reveal tons of posts presenting, explaining, analyzing and suggesting how to make agile methodologies work to your advantage. And we have to keep in mind that they all usually apply to teams of 3 or more people. This post is about the freelance developer who just needs a simple way to manage tasks and projects. I do not claim that I present the absolute and irrefutable Truth; every person has their own way of working. This post simply intents to be a starting point to another way of doing things.

Meet Sally. Sally is a developer, a Samurai Coder, a hero of the day and she absolutely loves writing code. She works as a freelancer and the other day she got a new project from a customer.

Before starting work, she picks up a piece of paper. She writes down the day’s tasks (to-do’s, appointments, ideas etc) and crosses off the completed ones. She repeats the same process every day. These sheets of paper pile up and follow her everywhere… until she finds Evernote. Evernote replaces the paper and uploads her notes to the cloud, but still…. The notes multiply just as much and just as quickly as the papers do. They only stop creating piles on her desk.

Sally is desperately in need of solution – a way to capture and track her customer’s numerous requests as well as the 100+ things she has to do. What about a bit of agility and organization? How about combining simple methods and tools to get things done? Sally gave it a thought and found out the 5 most important things to her:

  1. Ability to separate projects and tasks.
  2. Clean visual overview, i.e. understand what needs to be done, watch the progress or the big picture, and prioritize accordingly.
  3. Sharing and Collaboration features.
  4. Accessibility, i.e. ability to retreat her work through any device in real time.
  5. Speed, i.e. Sally’s work is programming, not using tools. Tools should work for her, helping her save time, and not the other way around.

The simple process

  1. Here’s a really simple and basic five step-process that Sally could follow. This kind of flow is Kanban-like (but I will talk more about Kanban on another post).
  2. Create a repository for every project.
  3. Separate it virtually in 3 areas: to “To Do”, “Doing” and “Done”.
  4. Add new tasks, requests or bugs in the “To Do” area.
  5. While working on a task, move it from “To Do” to “Doing”.
  6. Move the task to “Done” when completed.

image00

The tools

There is a great variety of software tools in the web; tools for small teams, big teams, distributed teams… But how about one single person? We will see how Sally can follow this process with the use of 3 simple tools: a) Trello, b) Asana and c) Wunderlist

a) Trello

Trello’s visual layout is very intuitive. Imagine a dynamic whiteboard with columns (lists) and cards (like advanced sticky notes).
How to use it:

  1. Create Project with the use of Trello Boards: Each Trello board represents a project. Add lists (columns) to simulate progress. Add cards as tasks. And that’s all…
  2. Managing Tasks: A new Board has by default three basic columns: “To Do”, “Doing” and “Done”. You can drag a card over these columns anyway you like and you can always visually track both the card and its status.
  3. Handling of requests or bugs: Trello has a color mapping that you can apply on the cards (e.g. red color for bugs). You may add lists, comments and much more.

image01

b) Asana

Asana is an advanced task list oriented application with an equally intuitive visual layout to Trello. It is fast, easy to use and quite popular.
How to use it:

  1. Create Project with the use of Asana Projects: Start a new project and add tasks in the center column.
  2. Managing Tasks: Tasks added in the center column get a level of hierarchy and may be stacked. You can start by creating the three high level tasks “To Do”, “Doing” and “Done” and then fill them with specific tasks accordingly. You can easily create a task, drag it to move and edit its details on your right hand side (add sub lists, comments and more). There is a checkbox in front of every task and may be checked if the task is completed. By doing so the task is removed from sight but if you prefer you can manually drag it bellow “Done”.

image02

c) Wunderlist

Wunderlist is a pure task list oriented application, though their newest update has many improvements including Collaboration and Public Lists. It has a clean UI and is much simpler than Asana, quite fast and user friendly.
How to use it:

  1. Create Project with the use of Lists. Add a new list and add tasks in the main column. Just like a true boss…
  2. Managing Tasks: Add tasks in one column. In order to create some kind of flow for your tasks, create more lists (see the example in the pic below). Wunderlist is quite easy to use, but not as advanced as other tools, i.e. missing collaboration features, ability to assign subtasks, etc.

image03

All of the above tools are equally fast, have the ability to collaborate (add more people to your list/project) and can sync to other available devices.

Quick Verdict:

Trello

 

+ Nice visual and collaboration.

 

– No task sub lists (there is a great checklist feature, but there is a minor problem: you cannot assign tasks to these lists. As a result you need to create separate cards).

 

– The visual style with the cards may overcrowd the board making it look messy.

 

Asana

 

+ Nice interface, quick.

 

– Not a nice “big picture” or “flow” visibility

 

Wunderlist

 

+ Nice simplistic UI, powerful task list.

 

– Missing advanced features the other tools offer.

 

+ Their recent update added collaboration features.

 

Sally in our story has therefore many great tools in her disposal. All she has to do is put her pen and paper aside and work easier and faster. And you can all join her!

Categories
Business

How We Learned to Built Hardware, the Agile way

I ‘m part of a hardware research group at Telefónica Digital called “Physical Internet Lab”. Three years ago we started a small group under the Emerging Technologies area of the company focusing on the Internet of Things. The commitment of the group was (and is), in ambitious terms, “to democratize the Internet of Things” opening it to as many makers, developers and users as possible. Our goal has been not entirely altruistic: Telefónica as a network operator has a lot of value to add in the Internet of Things economy.

On day to day basis we build prototypes and products, usually connected objects or components like the Thinking Things building blocks.

Setting up the lab three years ago was no easy task. We wanted to work at the crossroads of the Internet, the Things and the People. But our development skills were almost 100% software related. In the process we built a team skilled on all three sides. And we figured out how to do agile hardware.

agile-hardware

Of Agility and Hardware

We ‘ve come full circle. Telefónica I+D (the Telefonica Digital development branch) was created 25 years ago to produce hardware innovations such as X.25 and ATM switches. We did that in the classical engineering fashion: writing long and rigid lists of requirements, splitting the work across solution providers, integrating and then testing following a waterfall schema.

Over time Telefónica I+D adapted quickly to the technology changes and by the mid-nineties we were developing mostly software. First we followed the same engineering process; then we moved towards more iterative methods. In the last 10 years we have adapted fully to agile methodologies.

As we were building the laboratory we found ourselves getting back to hardware. But the company now could not understand a slow-moving unit. The lab had to be agile. So we had to bring agile methodologies to hardware development.

The first difficulties came with the corporate facilities. Hardware work demands physical proximity and we could not afford to have a distributed team depending on collaboration tools on the Internet. At the same time, soldering fumes or drilling noises were not welcome in our modern, bright, open spaces. So the team had to move to a closed office in an old building in Madrid city center.

Moving to the city center was a boon: in minutes we could reach many shops and services, buying anything from hammers to plastic boxes. Visitors now found it easier to visit us in a centric garage-like office. This was great for our open approach as we wanted to help and interact with other companies and organizations.

Purchasing tools was another problem. The corporate procedures were tuned for large-scale purchases such as server farms or external services. Buying a handful of resistors for 10 euros could take several weeks, creating bottlenecks to our work. Fortunately the purchasing department showed a great deal of sensibility. We worked together to redesign the process. Now we buy any component or tool in a single day while still working by the book.

Putting together the Agile team

Hardware work implies multiple teams across several companies with extremely specialized profiles. When setting up the lab we opted for a small and autonomous team, able to build a hardware prototype with no external dependencies.

A small team allows us to work closely integrated, in the same location, continuously coordinating our work. A small team also means that budgets are smaller and is well suited to experimenting, failing, learning and adapting.

Basic agile methodologies such as Scrum expect some degree of overlap between the specializations of team members, so that different people can execute the same tasks naturally balancing the work load. But hardware work is different. It demands a lot of specialization. In our case most of the tasks can be executed only by one team member. As a result, the Scrum methods and tools have to be modified to reflect this reality.

Our internal workflow follows many steps. The first step is the Industrial Designer, a role which is somewhat of a novelty in the Telefonica Digital payroll. Carlos (that’s his name) starts his work in the CAD station designing the physical product: plastic pieces, metal straps, cloth, magnets. Then he builds the design using the currently available 3D prototyping tools such as the laser cutter, the CNC tool (i.e. a computer controlled drill) and a variety of 3D printers. These tools give much flavor to the lab.

In some cases we start from an existing object that we hack so that we can explain a new concept. Carlos at the same time designs and builds, which is a bit out of his job profile. Software developers are multi-taskers, too – they design and type, while software architects can also code. In the hardware industry this is somewhat unusual and typical engineers expect someone else to physically build what they have created. In the lab we follow the software philosophy. It is leaner, and gives the designer a real feel of the piece or circuit construction. This approach demands some tolerance and patience from engineers who have to get their hands dirty.

The same philosophy applies to the next step in the workflow: the electronics engineering part. The electronics engineer first designs new circuits, then prototypes them. We even design and build the PCBs to check that everything fits in place.

The agile doctrine underlines the importance of early user testing. Early use provides rapid feedback focusing the most important characteristics of the product and showing what isn’t relevant for customers. To shorten the time-to-test we use 3D printing and prototyping technologies.

In electronics engineering we massively use Open Hardware. Open Hardware gives us access to lots of ready-to-use designs that we can employ in product testing. In a sense, Open Hardware behaves now like Linux and Open Software in the mid-nineties. It allows us to focus on the real technical or design challenge rather than reinventing the wheel for every test.

Electronics and physical design teams work side by side, so they can verify in real time how components fit in the same object. Our objects become more than simple plastic boxes, as they are tightly coupled with the internal electronics.

Electronics engineers work also with the firmware developers. The firmware developers write the code for the embedded microprocessors. They also have to deal with connectivity issues and power management.

In our Physical Internet Lab, electronics and firmware engineers work side by side. In most situations knowing what will firmware do simplifies hardware design. Similarly, software developers can ask for fine changes in the hardware designs nearly in real time.

On the other side of firmware sits backend development. In our typical systems architecture, distributed devices communicate with a backend service in the cloud. We push as much intelligence as possible to the backend service, so our designs can evolve without touching the deployed hardware or executing firmware updates. We like to think that the back-end gives every object nearly infinite computing power and knowledge, as it can interact with any other Internet service.

Again back-end and firmware developers work side by side. This tight collaboration resolves any integration problems before they appear, and encourages electronics and firmware developers to take issues to the more powerful (and more agile) back-end platforms.

The final technical step is the front-end development, usually based on web and native apps. Again we do a lot of work locally in the lab, well integrated across the team.
The frontend is also tested in complete end-to-end scenarios. Automatic testing tools execute scripts that run against the firmware and the frontend.

And of course, there is a Quality Assurance side. We are extending continuous integration, test driven development and automatic testing to the embedded firmware. At the same time we have to handle more hardware specific tasks such as sensor calibration, assuring robustness and strength.

Physical Interaction Design

The web/application interface and physical design are the two endpoints of the “development chain” of our group. They form the two interfaces exposed to the final user. At the final part of our workflow, the physical interaction designer, works with both web / app and physical design.

The physical interaction designer is responsible for the design of the connected object as a whole. He takes care of building a single object with a coherent interaction model in the physical world and in the Internet.

Without the physical interaction designer we would have to separately design the physical object and the application or web interface. The result would be a split-personality product, usually an amalgamation of data stuck on top of a square box. The physical interaction designer combines the capabilities of the physical object and the Internet interface in a coherent manner.

Physical interaction design, bringing together the Internet and physical objects is a completely new field. There are a handful of specialized schools in the world, and we are working too with UX designers with strong industrial design background.

Everyday physical objects have usually long stories and designs optimized through centuries of use. We still have a lot to learn on how to take the Internet beyond of the smartphone/tablet/PC onto this physical object world. Customers will not adopt Internet of Things devices if they are a step behind of the design standards they have become accustomed in software interfaces.

Agility plays a role here, once again. Developing and prototyping quickly we can try interaction designs with users, test our assumptions and build a sizeable bunch of knowledge around user interaction with connected objects.

External providers

Of course we have to work with external providers, especially when dealing with complex technologies or industrialization. For development we often use online services for as PCB manufacturing or 3D printing. They are extremely easy to use, robust, fast, and offer a direct web interface instead of long negotiations with a salesperson.

For the final manufacturing we interact with real, serious manufacturers. Agile, as a software development doctrine has no solutions to this task. But Agile can be seen as a spin-off of Lean philosophy, which was created to deal specifically with manufacturing issues.

One of the main lessons from the Lean methods is that service providers have to be tightly integrated in the business process. We have found this is very important also for us. The lab has spent considerable efforts building trust relationships with service providers and manufacturers, integrating their teams with the lab. Schedules and plans are shared under an openness philosophy. We have established even real time communication so their teams get continuous feedback from the engineers in the lab.

The future of agile hardware

We have yet a long way to create a truly Agile Hardware lab. Physical work is sometimes slower than software development. Some other times (especially when prototyping on Open Hardware designs) they are blindingly fast and have to pause and wait for software components. Speed differences keep the group working on different “user stories” at the same time.

External dependences are many, and the lab will never be, in that sense, completely autonomous. But we can find yet faster service providers and build leaner and more integrated workflows with them.

Regarding Quality Assurance we have to handle correctly the physical device characterization and fit the expensive and slow certifications in the product workflow.
The bright side is that Agile methodologies provide and require continuous improvement. Every sprint or work cycle forces us to learn and adapt our methodology and organization, looking for a better process. Perhaps in a couple of years we’ll have a completely different process in a completely different lab, and it will be all right.