Category

Django

Should You Build Your App From Scratch or Using Salesforce?

By Development, DjangoOne Comment

An important decision that comes to all companies before building out an application, is the decision to use either an app builder like Salesforce, where almost no prior coding experience is required, or a web development framework, like Ruby on Rails, C#, Java, or Django (we will simply refer to rails for now). It’s an important decision that will determine the development path to follow. In this article, I’m going to go over the benefits of both Salesforce and Ruby on Rails in order to help you make an educated decision on what path you would like to follow.

Salesforce

 

Pros:

Streamlined – Salesforce strives to be an end to end software data tool to manage your complete enterprise. You can easily connect all your employees using streamlined tools and applications that come out of the box. This requires fewer resources overall and allows you to manage your business from anywhere.

Mobile First – Salesforce also gives companies and developers an easy way to create your mobile applications. In fact, it’s touted as being built mobile-first. The instant you create an app for your browser, a clean-looking mobile version is generated that can be used by all users.

Simple – As you may be able to tell from the previous benefits of Salesforce, it is built to be straight forward. Salesforce is proud to note that their software can be managed by others who have have less technical experience. This is especially true due to Salesforce’s own Trailhead, which is “The fun way to learn Salesforce”.

Cons:

Limited Customization – There isn’t much customization for how Salesforce apps work and look.  If you purchase a solution that is built on top of Salesforce, you are often limited in your ability to customize how it will work as you now rely on Salesforce updates. For users on Salesforce, some functionality may break after Salesforce update. Updates usually consist of large layout changes to the platform, causing problems to the businesses using it by making some important features now hard to find. This also gives new Salesforce businesses a learning curve around the Salesforce system, not the business.

Expensive – While Salesforce seems inexpensive out of the gate, costs can quickly escalate out of control.  If your ROI (return on investment) isn’t there, Salesforce will be an anchor instead of a rocket boost.  Many times, the rising costs of additional but much needed capability causes subscription creep that the company is saddled with.

Developers Needed – Many companies try and wedge in a java or .net programmer and tell them to code up Salesforce apps or integration only to find that they cannot do the work. To build and operating in Salesforce at a deeper technical level, you need to have experiences certified Salesforce personnel on your team.

Building From Scratch – Ruby on Rails/Django

 

Pros:

Application Flexibility – If you are building a specialized software product, rails is also no doubt one of the best for designing a customized platform.  Rails allows you to customize everything from design, to workflow, to api exposure. In Rails, because developers practically start from the ground up, you can put a very personal touch on your app.

Platform Flexibility – There are no platform limitations.  If you can think of it, you can build it.  You are not limited to restrictions. Building your apps in Rails will also save you from worrying about third parties. With Rails, the only business you need to rely on is your own.

Cost – For smaller companies with developer experience looking to start up a new application can find Rails applications to be more affordable with server usage being the only minimal cost.

Cons:

Experienced Developers – Working on a Ruby on Rails web-app will require one or multiple experienced developers. Connecting your users is also a greater hassle as well, compared to Salesforce.

 

Conclusion

If you are looking for a flexible and cheap way to create a CRM, then building your application from scratch would be your best choice! Especially if you are looking to create a much more personalized CRM that works your way. On the other hand, if you are looking for something simple and streamlined, Salesforce is the choice for you! As anyone can learn Salesforce! In the end, it’s whatever benefits your business the most, for whatever its needs may be. You could even do both, with the ability to integrate the Salesforce API into your Rails project.

Upgrade Python to support Django 2.0

Upgrading Python To Support Django 2.0

By Agile, Development, DevOps, Django, Python

Across the land, there are many developers, dev ops, and software delivery managers are terrified of the big move from Python 2.7 to Python 3.6 (at the time of writing this).  You can see all of the versions from the beginning of time.    I am going to walk you through why it is happening, how to plan, and more importantly, how to upgrade your infrastructure in a systematic manner.

Assumptions:

  • There are multiple developers on the team
  • There are multiple Django instances in your organization

Why move? Django

The answer is pretty easy… Django, the core web platform programming framework associated with the Python  programming language won’t support future releases in Python 2.7 any more. In fact, the Django 1.11.x series is the last to support Python 2.7.

Django 2.0 supports Python 3.4, 3.5, and 3.6. We highly recommend and only officially support the latest release of each series.

Note according to PEP 373, Python 2.7 is currently expected to remain supported by the core development team (receiving security updates and other bug fixes) until at least 2020 (10 years after its initial release, compared to the more typical support period of 18–24 months).

How to Plan?

When it comes time to plan for an event like this, it is important that you identify the critical components of your infrastructure.

Sample User Story

As a developer, would like to have a complete list of technical assets that use Python so I can generate an upgrade plan that reduces risk to the company.

Acceptance Criteria: Generate a list of the following assets which include:

  • Your Django platforms to include, dev, test, and production instances.
  • Other internal platforms ( AWS lambdas, small flask instances)
  • External/Internal libraries
  • Cronjob or schedule tasks running Python
  • Continuous Integration systems that build  (ie Jenkins)
  • Unit testing
  • QA regression testing scenarios
  • Code repositories
  • Your development team list (each one of them will have to complete upgrades)

Step 1 – Select Your First System

Pick your first system to do an end to end test.  If you only have one single platform of Django, then… you are done.  We recommend that you clone your dev instance for your first test.  If you don’t have a dev instance, stop reading this and make sure that you do have a dev, test and production version of your platform!

If you have multiple systems, we recommend that you select one that is much smaller in scope and will have as little impact on your operations as possible.

Sample User Story:

As a developer, I would like to select my first computing environment to upgrade Python on so I can minimize the impact on our operations.

Acceptance Criteria:

  • You selected one of the least impactful systems in your eco-systems
  • You clone a working environment that it identical to this instance.
  • You notify the team of what you are doing and discuss any impacts that your testing might have with them.

Step 2 – Start your documentation

If you have other people on the team, you will want to make sure that you can guide them along the path of upgrading their computing environments and be able to discuss problems that you had.

Sample User Story:

As a developer, I would like to document the upgrade process steps that  I took so I can help others on the team upgrade their computing environments to Python 3.6 with Django.

Acceptance Criteria:

  • Document your finding in confluence.

Step 3 – Review external dependencies

Not all pypi libraries are Python 3.6.3 compliant.  Many are only built on Python 2.7.  The good news however, is that most major libraries have been ported to 3.6.x.  The complete list of PyPi libraries per version is listed here.

Individual Library Inspections

As a developer, you can see the details of any pip installed library by calling this command: pip show LIBRARYNAME –verbose

Example:

(bytelion_env)~>pip show requests –verbose
Name: requests
Version: 2.13.0
Summary: Python HTTP for Humans.
Home-page: https://python-requests.org
Author: Kenneth Reitz
Author-email: me@kennethreitz.com
License: Apache 2.0
Location: /Users/terrancemacgregor/.virtualenvs/bytelion_env/lib/python2.7/site-packages
Requires:
Metadata-Version: 2.0
Installer: pip
Classifiers:
Development Status :: 5 – Production/Stable
Intended Audience :: Developers
Natural Language :: English
License :: OSI Approved :: Apache Software License
Programming Language :: Python
Programming Language :: Python :: 2.6
Programming Language :: Python :: 2.7
Programming Language :: Python :: 3
Programming Language :: Python :: 3.3
Programming Language :: Python :: 3.4
Programming Language :: Python :: 3.5
Programming Language :: Python :: 3.6
Programming Language :: Python :: Implementation :: CPython
Programming Language :: Python :: Implementation :: PyPy

Sample User Story

As a developer, I would like to know which PyPi libraries are not supported by my current system so I can determine a migration strategy.

Acceptance Criteria

  • List is generated and shared with the team
  • For each library that is not supported, identify an alternative.

 

Remember the 80/20 rule?

Many of the upgrades from 2.7 to 3.6 can be safely automated, some other changes (notably those associated with Unicode handling) may require careful consideration, and preferably robust automated regression test suites, to migrate effectively.

 

Upgrading Server Code

 

Programming Language :: Python

Here is a list of what some other people experienced:

https://www.calazan.com/upgrading-to-ubuntu-1604-python-36-and-django-111/

https://blog.thezerobit.com/2014/05/25/python-3-is-killing-python.html