Learn how to reset your City of Austin Network password remotely from a Mac using Citrix AnyConnect.
Get set up with a PC assigned to your Citrix profile. You may have to contact Scott Reedy for assistance with this step, but you'll need a PC assigned to your Citrix profile.
Log in to using your CoA username and password.
URL:Username:coacd\ + your last name and first initial. Ex: coacd\clarkem
Password: your CoA Network password (same as Outlook)
Click the Settings ⚙️ icon in the top right, then "Account Settings."
Click "Change password."
Fill out the Change Password form and click "OK."
Once you change your password in Citrix, immediately log out of AnyConnect. It is possible to lock yourself out because you are logged into AnyConnect with the old password at that time. You can reach out to Scott Reedy to unlock you if that happens.
Have someone on the DTS team add you to the organization and the team as a Maintainer.
Add the to your browser.
Log into the using your normal GitHub credentials to activate your account.
Pipelines
The Zenhub board uses a -like format where issues are represented as cards and move across the board as they enter various stages of completion. Our workspace pipelines are:
New Issues - Awaiting triage by Level I Support or Product.
Icebox - Recorded and understood, but not committed to. Lack of evidence of overall value or applicability. We don't want to delete these and create a cycle of raising duplicate issues, so we keep them in our icebox with just enough information attached that we can pick it up sometime in the future — if and when we choose to do so.
Needs Scoping - Potential projects or features that require clarification or exploration before presenting to builders for estimation and prioritizing.
Issues
Tracking our work in issues not only helps us stay organized, it gives us data on where we're spending our time. To create an issue, click the green "New issue" button in the upper right corner of the or our .
You will see a list of our custom issue templates. These are handy for creating bug reports, meetings, etc. with boilerplate information and structure.
Issue Titles
Issue titles should begin with a verb* and summarize the work to be completed. This convention improves data readability and helps keep our tasks action-oriented and unambiguous. Since you'll be using Product: and Type: labels, you don't need to spell out application names or issue types.
You can apply labels by clicking the "Labels" heading in an issue's right-hand sidebar and beginning to type the label name.
You can also .
The importance of labels
Accurate labeling is necessary for several reasons:
Labels allow us to view related issues across the Zenhub pipelines. For example, during Apps Team Sprint Planning, we filter down to Service: Apps and during our periodic meetings with AMD we use the Workgroup: AMD label to look at all the work — across teams, of all sizes — that we're doing for them.
Labels are also used to populate .
Finally, labels are critical to the
Required labels
— the customer we're serving; Workgroup: DTS for internal work and Workgroup: TPW for department-wide work. Every issue should have one, and only one,Workgroup: label.
— The DTS service team who will be doing the work. If there are two teams working on the same thing, copy the issue so there's one for each team. Every issue should have one, and only one,Service:
Optional labels
A DTS team or individual product manager may find these additional label categories helpful
— The effect of a bug, infrastructure failure, etc.
Impact: 1-Severe — Severely impacts TPW service delivery
Impact: 2-Major
Estimates
Estimates are how we track the level of effort of issues. Every issue should have an estimate once it is pulled on deck or into progress, and estimates can be adjusted as needed. Check estimates for accuracy whenever you close an issue. Use 0 estimates for duplicates and other issues we don't work on.
Like labels, estimates are required because they are a critical component of the we use to track, analyze, and improve our work. Estimates are also useful for
Sprint planning — to see when a person or team has too many issues (or too few!) issues assigned to them
Stakeholder discussions when prioritizing features — being able to show stakeholders easily that we can accomplish, say, three small tasks, two medium, or one large
— i.e. predicting the likelihood we can complete a project by a given date
about the hows and whys of estimates with ZenHub.
Assignees
An issue should be assigned to the person/people who will tackle it. This enables team members to filter down to issues they are responsible for easily.
Epics
Epics are a powerful feature that Zenhub adds to Github. They allow you to group related tasks and easily track them from one place. . Here from another City of Austin project.
For ongoing tasks such as a recurring meeting, it may help to create an epic and put the individual instances of the tasks inside it. of that type of usage for a task performed for a customer regularly.
Epics do not need estimates assigned to them manually. Instead, the effort is represented by the total of all the story points in the epic's issues. That said, you can add estimates to the epic issue to represent the effort used to managing the sub tasks, i.e. meetings with stakeholders as the work progresses.
Ultimately, epics can group whatever makes sense for you and your collaborators. Some people prefer . That's fine as long as the issue doesn't require more effort than we can represent in our for a single issue.
Github recently introduced , and on top of them. The DTS Product team hasn't yet decided if/how we will modify our workflow to incorporate these new features. For now, we're continuing to use epics as we always have.
Learning More
Here are some additional guides for some of our most relied-upon Zenhub functionality:
"Use multi-action to make bulk Issue updates" on
The are super-solid, and we encourage you to peruse them at your leisure. Remember that some functionality—renaming and reordering pipelines themselves, for example—will affect the workspace for the whole team. We're always looking for ways to improve our process, so if you come across an approach or functionality you think is promising, add it to the agenda for our weekly Product Sync or share it in the #atd-product Slack channel!
Backlog - Issues that are ready to be tackled by the team when the time comes. This pipeline is prioritized: the higher an issue is on this list, the higher the priority.
On Deck - Slated for work in the current sprint. During Sprint Planning, we pull all issues that we intend to work on during the sprint into On Deck.
Blocked - Issues that cannot be completed — often waiting on CTM or user feedback.
In Progress - This one is self-explanatory. Each Issue in this pipeline should have an assigned owner who is responsible for its completion.
Ongoing - Continually supported products and activities.
Review/QA - Proposed as complete but awaiting approval — code review and/or acceptance testing — before closure.
Ready to Deploy - Code or configuration that is ready to be deployed to production.
Closed - Done! 🙌
that we use to track, analyze, and improve our work.
l
abel
Type — The type of request or task. Every issue should have one, and only one,Type: label
Project and/or Product labels, if applicable
Projects refer to a substantial scope of related work that will reach a state of relative completion, such as the AGOL Audit
Products are solutions that we continue to support over time, including all in-house applications, such as the Vision Zero Crash Data System
Often, a major feature or enhancement to an existing product will require enough resources and coordination that it qualifies as a project. , for example, was a major set of features and enhancements to AMD Data Tracker and the Finance and Inventory App, so it needed both Product and Project labels
— Causes a major interruption of TPW service delivery
Impact: 3-Minor — Deteriorates TPW service delivery
Impact: 4-None — Does not affect TPW service delivery
Need — To designate priority of a potential feature or enhancement
Impact: 1-Severe — Severely impacts TPW service delivery
Impact: 2-Major — Causes a major interruption of TPW service delivery
Impact: 3-Minor — Deteriorates TPW service delivery
Impact: 4-None — Does not affect TPW service delivery
Provider — The external team or vendor executing the issue
Add task order fields to "Funding" tab
AMD staff can't track all funding information
Publish new CCTV camera thumbnails
CCTV map issues
Replace Vision Zero Editor council district dataset
— or —
Replace VZE council district dataset
Outdated council district AGOL resource in Vision Zero Editor
The Jobs API is a tool for logging the outcome of ETL scripting jobs. It is designed to support the task of "incremental" data loads—i.e., loading only new or updated records from a source database to a destination database.
The typical ETL workflow using the Job API is:
At the beginning of your ETL job, query the Job API to retrieve the timestamp of the last time your job ran successfully.
Use this timestamp as a temporal filter to extract new/modifed records from the source database.
At the completion of your ETL job, register the successful outcome with the Job API.
Querying the API
The postgREST-provided jobs API is available at , and it can be queried using, as described in the . VPN access is required. You can also query the api.jobs table directly from our Postgres read replica.
Field Definitions:
Python Example
We've written a Python utility to interact with the jobs interface. It's included in our pacakge. tdutils requires Python 3 and can be installed with $ pip install tdutils.
Begin by importing the jobutil library and creating a new job instance:
Assuming you've run this job successfully in the past, you can use the most_recent method to return a unix timestamp from the last successful job run:
Register your new job with job.start(). The API returns a JSON representation of newly created job record:
We have successfuly registered a new job. Note that the status was automatically set to in_progress. If we were to call job.most_recent() again, the results are the same as before, because the status of current job is not success:
From here, continue your ETL process as needed. When your ETL is complete, use job.result() to update your job status accordingly. Again, a JSON representation of the job record is returned:
Note that the end_date was populated automatically. Because the job was successful, calling job.most_recent() now returns the timestamp of our current job:
You should also register job failures. The errror result is availabe for such purposes:
The job's end datetime
message
TEXT
Optional message
status
TEXT NOT NULL
The status of the ETL job. Use 'in_progress', 'success', or 'error'
records_processed
INTEGER
The number of records processed by the job.
source
TEXT NOT NULL
The name source database of the ETL job.
destination
TEXT NOT NULL
The name of the destination database of the ETL job
Fieldname
Field Type
Description
id
SERIAL PRIMARY KEY
System-generated incremental ID
name
TEXT NOT NULL
Name descriptor of the job which uniquely identifies the ETL job
try:
# do ETL stuff
except psycopg2.DatabaseError as e:
job.result('error', records_processed=0, message='A database error occured.')
Server Operation
Script Management
shows an active job status log.
Application Management
We have an that we manage on our DTS Portal. This inventory list will show the various applications that our department uses and that we manage.
Some of the main functions our team does is:
Software Support
Working at DTS Basics
Municipal Civil Service
The rules govern the process for employee hiring, promotions, lateral transfers, reduction-in-force, disciplinary actions, and appeals. If any supplemental information included here conflicts with the official MCS rules, those rules take precedence.
It's very important that the job server keeps from timing out.
knack-proxy was a flask app, but has been taken down.
Its functionality was no longer needed after Boomi replaced the Enterprise Service Bus (ESB). Boomi is able to communicate directly with Knack. The change-over occurred in January, 2026.
Since we converted this code into an async Sanic app we haven't had issues with it failing. But we did previously with Flask and never really got to understand the root issues.
If it goes down, log into atd-data01 via ssh and restart the containerized app with docker restart cctv-service.
atd-data01 is our main/production data publishing server.
If atd-data01 crashes, it would just need to be restarted. Insert bash command sudo reboot. All of the data scripts are on cron jobs and will restart at various times. The two service app in docker containers on atd-data01 do need to be restarted manually. Those restart scripts live in their respective Github READMEs.
Bash Commands
Allocate Disk Space
List volumes and usage:
Check the free available space in the Volume group
Extend the volume (here, adding 8GB)
Expand the volume:
All done.
Miscellaneous:
run all shell scripts inside a folder
scp transfer files from local to remote directory:
All Austin Transportation Department employees are required to work 8.5 hours/day. That includes a mandatory 30-minute lunch. You can take a longer lunch but can’t count it as work time. You can work through lunch but still need to put in 8.5 hours.
Your start time can range between 8am and 9:30am. We ask that you work the same schedule consistently and post your daily stand-up when you log on.
When meetings get scheduled outside your regular work hours, you’re expected to attend them. Let your team lead know in advance when you cannot attend a meeting that requires your attendance.
Flexing Hours
You can occasionally flex your hours to accommodate doctor appointments, errands, etc.; give your team lead a heads-up in advance. We understand that unexpected absences can come up.
“Non-exempt,” aka "hourly" employees, can flex hours within a single work week (Sunday-Saturday), so long as you reach 40 total hours. "Exempt" employees can flex hours across the two-week pay period, so long as your hours total 80.
Leave Time
If you can’t or don’t want to flex, you can use sick time for doctor appointments and personal time (vacation, personal holiday hours, comp time, etc.) for anything else. You may also use leave without pay (LWP), but LWP requires pre-approval and should be discussed with your supervisor at least two weeks in advance.
Non-exempt employees can earn overtime and comp time, which require advance approval from your supervisor.
If you are a new regular employee, you, unfortunately, can’t use vacation or personal holiday leave during your six-month probation period. If you need to take time off during probation, you have three options: flex hours, use sick time, or take leave without pay.
Regardless of the leave you use, you must submit a leave request in advance through the eTimesheet system (see below).
Timesheets (Needs to be updated for UKG)
You'll have to fill out a paper timesheet during your first two weeks. Your supervisor will help you get one from HR.
Cameron Road: coa-atd-secure-wifi — password in 1password
VPN & Remote Access
You need to be on the City of Austin internal network to access various resources such as shared network drives, the HR Portal, the original CitySpace, and many City of Austin Sharepoint sites.
Cisco AnyConnect VPN is the client we use to remotely connect to the City network from a Mac.
Use of Personal Devices on the City Network
If you use your personal computer for work at the any CoA office be advised that you should never directly connect to the CoA Ethernet network. You can connect to the CoA internal network via VPN when necessary. CTM runs occasional security scans for devices that shouldn't be on the network and if they discover your personal computer, they reserve the right to take your computer, run scans, and review files.
About
The Data & Technology Services team at Transportation and Public Works applies user-centered design, agile software delivery, and progressive civic tech values to build impactful solutions with Austin’s mobility planners, engineers, technicians, and staff.
We use many modern tools and technologies to deliver solutions to our stakeholders. We build enterprise business systems using Knack, a no-code workflow management service, and we also have a team of developers who build custom software when out-of-the-box doesn’t cut it. We embrace mature frameworks with an eye toward maintainability and long-term stability. We love web mapping and champion open source and open data across the City of Austin.
Our Mission
We leverage high-quality data and modern technologies to empower Transportation and Public Works staff to improve operations, make data-informed decisions, and deliver excellent mobility services to the Austin community. We solve real problems for real people.
Our Values
The principles that guide us as we carry out our work
Embrace change
Business needs change; technologies evolve. We welcome new challenges and improve by adapting to and embracing change. We are stubborn about our goals but flexible in our methods.
Users first and always
We build only what people need, nothing more. User needs are the driver for all decisions. We build with our users, keeping them involved in our process through ideation, sprint reviews, demos, and usability testing.
Empower great people
Our work empowers civil servants to discover and cultivate new skills. We aim to provide opportunities for personal and professional growth and to empower the public to engage with their government through open information and collaboration.
Default to open
The residents of Austin are at the top of our org chart. We share everything we do so that we can collaborate with the public and receive critical feedback. Before restricting access to a line of code, a dataset, a design brief, or an app, we ask, “Why?”
Nurture, include, and grow together
Delivering great tech cannot come at the cost of our wellbeing. We commit to building a safe and inclusive workplace by looking out for each other, listening to each other, and advocating for each other.
Data & Technology Services is located at Transportation Public Works' Cameron Road location. Our offices are in 8700 Cameron Road, alongside Arterial Management offices and the Mobility Management Center.
Ben White
We have an area at Ben White for DTS Staff. Ask your supervisor before attempting to work from that location.
DTS Hoteling
Ben White
Permitting and Development Center (Public Spaces)
Using Google as a City Employee
Using Google within these parameters ensures we comply with CTM's security protocols. We can fulfill PIRs, follow records-retention policies, and maintain access to employees' work when they leave the City.
Account creation
Employees should not use personal Google accounts for City work since all City-related email correspondence must reside in Office 365. So you will need to create a Google account with your @austintexas.gov email address that is not attached to a Gmail account:
Visit .
Click "Use my current email address instead."
Enter your @austintexas.gov email address.
Check your email, including your junk/spam folder, and confirm your account.
Remember, never add a Gmail address to this account! It's against City policy and creates a permissions headache for your supervisor.
Permissions
All your documents should be saved within a folder owned by a shared resource account, coaatdamd@austintexas.gov. This means we can all search and access each other's files, even if someone is out of the office or leaves the team.
Sensitive information
Under no circumstances should sensitive information be stored in Google Drive. This includes and data, along with any personally identifiable information about individuals in the community.
Working Remotely from a Mac
There are a few special procedures and applications for City of Austin staff who want to work remotely using a Mac.
This documentation has not been updated since CTM updated their Mac policies and procedures.
Antivirus Software
Per the , all City-owned computers must have up-to-date virus protection installed and active.
The TrendMicro website has Mac installers and installation instructions . You will need the serial number in CTM's doc.
Network Access with Cisco Secure Client VPN (formerly Anyconnect)
You need to be on the City of Austin's internal network to access resources such as shared network drives, the HR Portal, and enterprise web applications like eCombs and eCapris. You can use Cisco Secure Client (formerly AnyConnect) to connect to the City's Virtual Private Network (VPN) when working remotely.
Installing AnyConnect
1. Download the installer by visiting .
2. Double-click the downloaded file to open the disk image, then double-click on AnyConnect.pkg.
3. When the installer opens, click "Continue," "Agree," and leave the defaults on for the installation type:
4. When prompted, provide the password you use to log in to your computer, and the installation will begin. It will take a few minutes to run.
5. Once told the installation has been completed successfully, click "Move to Trash" to delete the installer.
6. You should now see a Cisco folder in your Applications folder. Double-click on the Cisco Secure Client to open the application.
Using Secure Client
1. Open the application. In the empty field below "Ready to Connect," enter the IP address of the City's VPN server.
The IP address is sensitive information. Get it directly from your supervisor or another Mac user.
2. Click the "Connect" button.
2. A warning will appear. Do not check the "Always trust..." option and click "Connect Anyway."
A new browser window/tab will open and you will be prompted to login to the City of Austin SSO portal. Once complete, the browser window will close and your VP
Uninstalling AnyConnect
When troubleshooting your VPN connection, you may want to wipe all installs of AnyConnect and start fresh. You can use Uninstall AnyConnect, located in the Cisco folder in Applications.
Shared Drive Access
You must access the G Drive from the City of Austin Network. If you don't have a wired connection, .
1. From the Finder menu, select Go > Connect to Server.
2. Enter smb://coacd.org/dfs/ATD in the Server Address field and click "Connect."
3. You will be prompted for your City of Austin Network Username and Password. Once submitted, a Finder window will open to the G Drive.
Slack
We use Slack to stay in touch with our teammates. Your supervisor will provide you with an invitation to the .
Please join Austin Transportation channels, prepended with atd. These include:
Turn in all hardware issued from Austin Transportation back to IT Hardware DTS Staff
atd-data-tech - open to all City employees, default for team discussions
atd-data-tech-real-talk - private channel for sensitive information/conversations or those completely irrelevant to anyone else, e.g. "Turn in your timesheets"
atd-dev
atd-product
atd-standup - everyone on the DTS team posts a daily standup here
Daily Stand Up
We keep each other up to date on our progress and blockers by posting in #atd-standup every day:
What did you do yesterday?
What are you doing today?
Any blockers?
It's helpful to cite specific Github issues you're working on.
or 512-974-4357 (4-HELP from a City phone) - CoA enterprise IT, see for details on what tech they support
- job postings, policies and procedures, news
Staff Training
- free classes available through single-sign-on
Document Storage
We use our shared Google Drive for most of our work, but there are a few exceptions.
DTS Google Drive
We love Google Drive, Docs, Sheets, and Slides for collaborative document editing and management. Since CTM does not have an enterprise Google subscription, we follow these procedures carefully.
Using Google within these parameters ensures we can fulfill PIRs, follow records-retention policies, and maintain access to employees' work when they leave the City.
To prevent the proliferation of different versions of multi-editor documents, all collaborative documents are stored in a single location:
-
Windows-only File Types
GIS files, Visio documents, and other files that can only be used on a Windows operating system are stored on the .
Everything Else
Other documents can be stored in Google Drive or our G drive, whichever is most practical for the team and customer.
Be aware that anything stored on your local drive — the Windows C drive or Mac HD — is not backed up or accessible via other devices.
How to Connect to Network Drives on a Mac
You will need to be either hard-connected to the City network or. From Finder on Mac: Go > Connect to Server then type the address in the Server Address field
H drive: smb://coacd.org/home/PWDhome/[your username]
G drive: smb://coacd.org/dfs/ATD
Welcome to DTS
We are so happy to have you here. Let's configure some tools and ensure you have access to all the resources needed to hit the ground running. 💪👟⚡
Day 1 🐣
These are the high-priority tasks. Let your supervisor know if you are unable to complete any of them on your first day.
All your passwords relating to work should be stored 1Password and only in 1Password.
Week 1 🐥
Let your supervisor know if you are unable to finish any of these during your first week.
Week 3 🐓
Unless you are a contractor, you have a few last to-dos! The HR and DTS Portals are updated every 2 weeks with employee information from the City's enterprise HR system, so wait until week 3 for these ones.
Ask questions! Be a sponge and absorb it all! 🧽💦🌈
Bonus: if you find broken links or missing information! 😉
Municipal Civil Service rules - City of Austin rules regarding employee hiring, promotions, lateral transfers, reduction-in-force, disciplinary actions, and appeals
Team leads are responsible for tracking new team members' onboarding in Github:
Create an epic "Onboard [Name]" with two issues:
"Perform DTS Team Lead onboarding tasks," assigned to yourself and the new team member's supervisor—i.e. the person who will sign their timesheets. Copy and paste the checklist from this page into the issue body.
"Perform DTS onboarding tasks," to assign to the new team member once they have a Github username. In the meantime you can direct them to the Gitbook page.
Add these checklists into the issue bodies. If you have issues with formatting, you can take these steps:
Copy text below
Convert it to Markdown using
Hardware & Office
Network Account & Distribution Lists
If the employee is using city-issued equipment, submit a New Employee Request Form. Otherwise, use submit a Third-Party Remote Access Request Form.
New Employee Request Form
Third-Party Remote Access Request Form
For a full (18 page) explanation of this process, refer to . In short:
Next Steps
After the network account is created and you have their @austintexas.gov email address:
After they've created their Google and Github accounts:
After they notify you that they've uploaded their :
After they notify you that their Miro account was created:
Once HR has added regular/temp employees to the UKG timekeeping system, their supervisor—Peggy, Amenity, or Diana— must:
Index Issue Specifications
We use "index" Github issues to centralize information about each of our projects and products. It is critical that these issues follow a standard labeling scheme and content format so that DTS' project data is accurate, team members work is coordinated and efficiently tracked, and we have an accessible, high-level view of the project/product on the DTS Website.
Create a new Project or Product Index by selecting the appropriate issue template from the atd-data-techGithub repository.
Project Index
All projects which have been scoped require a project index issue to be placed in the appropriate Zenhub pipeline. The issue title, description, and labels should follow the below guidelines.
Title
The issue title should be prefixed with Project: . For example, Project: Warehouse Inventory Management.
Labels
Project Index
Project: xzy— A project-specific label that you will create, following our
Workgroup: xyz
Assignees
All DTS team members who contributed substantially to the project, including at least one product manager or team lead.
Description
Follow the issue template.
Image
See below.
Product Index
All products require a product index issue to be placed in the appropriate Zenhub pipeline. Once a product has been released, it should be placed in the Ongoing pipeline indefinitely until it is removed from service. The issue title, description, and labels should follow the below guidelines.
Title
The issue title should be prefixed with Product: . For example, Product: Data Tracker
Labels
Product Index
Product: xzy— A product-specific label that you will create, following our
Workgroup: xyz
Assignee
The product manager.
Issue description
Follow the issue template.
Image
See below.
Index Issue Images
All projects and products should have at least one image so that missing thumbnails don't disrupt the website design. We prefer these thumbnails options:
A or other of the data generated in the app
Photos of the project/product's or the related/; the is a fantastic source for these. We also have a you can add to or use.
A
Please avoid using
Full-screen screenshots or large diagrams as the first image - these don't render well in tiles. if they are helpful way to communicate the work.
Vendor logos - these doesn't give any information about the platform or use case and promote a commercial companies
The image should be at least 1000px wide, with a 3:2 aspect ratio. makes it easy to crop/resize as needed.
Project Delivery Workflow
Productsare the solutions we build for our customers, including Knack apps, AMANDA apps, custom software, and data systems. We improve and extend our products over time so that they deliver continuous value to Austin Transportation as business needs evolve.
Projects are time-boxed endeavors. They accomplish a singular goal and have a defined completion date. Examples include:
Delivering the first iteration (MVP) of a new DTS product
Project Initiation
Oftentimes, our customers initiate a project by submitting a DTS service request that is notably large and/or important.
A DTS team member may also create a project when there is significant work to be done on an internal product—such as , , or .
In either case, we begin by verifying that all our DTS project prerequisites are met:
Dedicated product owner to support requirements gathering, user research, and user onboarding
Division Manager sponsor to champion the project at the executive level
A commitment from the customer to collaborate in DTS's iterative, user-centered development process
Then either or convert the existing issue to match the . Either way, make sure that the 'Project Index' label is on the issue so that an evaluation record for the project is added to the DTS Portal and it appears on the website.
Don't worry about building out a robust project index before scoping the request. Just make sure the name and description (the first 1-2 sentences) are good and that it has all the right labels. You can comment out the rest of the template to fill out when you have more information.
Move the issue to the "Needs Scoping" Zenhub pipeline.
Scoping
PM schedules an intake meeting. Ideally, this will include actual users as well as the workgroup manager.
Prepare .
Meet and take notes; photos/recording may also be helpful.
Builder Huddle
PM sets up meeting with potential builders, e.g. Dev for a Vision Zero Viewer project, Apps for a ROW Portal project. If we aren't sure which route we'll go or the solution will require both, add to the to discuss.
Prepare a summary of request. Here's an ().
At the meeting, discuss the recommended approach and fill out the "Effort" section of the .
Sometimes we realize that the request isn't actually project-sized during the intake meeting or the builder huddle. No worries, we had a good opportunity to learn more about our customers' work. Might make sense to organize this work as an , once the time comes.
Product Sync
After assessing effort with the builders, it's time to assess value with the product team.
Add to for a "Refinement-week", i.e. the second Wednesday in a sprint. If feedback is needed sooner, or the project was initiated internally (like work on our technical infrastructure), bring it to instead.
As a group, fill out the "Value" section of the .
After the evaluation is complete, the Austinmobility.io script will pick them up and you will be able to see the project in relation to other projects in our backlog using the .
Move the index issue into the "Backlog" pipeline.
Prioritization
Google presentation used for Product Ops onboarding and TPW Executive communications.
Working docs
Activation
Once the time comes to work on the project:
Move the issue to the "In Progress" pipeline.
If you don't already have regular Sprint Reviews with the project's stakeholders, set up recurring meetings for the duration of the project so that you can demo work and get feedback.
Create a folder in the Projects/Products DTS Drive.
Convert the project index issue into an epic and assign future issues to the epic moving forward. Zenhub allows you to nest epics or assign issues to multiple epics, so feel free to use that functionality if you find it helpful.
Ensure that everyone who has stake in the project, from potentially impacted staff to interested executives, is aware the project is moving forward. Invite stakeholders to come to sprint reviews and/or participate in user research. Ask them who else should be included.
Optionally, hold a with your stakeholders.
Delivery
Perform requirements gathering with users. We often begin with and store requirements either as for in-house applications or in a software comparison matrix for off-the-shelf solutions.
Document bugs, feature requests, and enhancements as Github issues. You may want to encourage your users to contribute using the .
When you click the "New Issue" button in the upper righthand corner of most pages in Github, you'll find issue templates for bug reports, features, and enhancements. You have to scroll to the bottom of the page and click to the "Open a blank issue" link to get a plain issue. To skip all that, bookmark the and add it to your browser bar.
Work with the team lead—via Github comments or in a planning/refinement/sync meeting—to assign an to each issue. Zenhub's is also a fun way to estimate asynchronously.
Bring complex issues to Backlog Refinement ( | ) to discuss with builders. Break them up into smaller issues as necessary, document the agreed-upon approach, and align on an .
Prioritize work with stakeholders during Sprint Reviews.
Completion
A project is considered complete when the minimum viable product—captured in the "Scope and Deliverables" section of the issue's project index—is delivered to users.
For complex projects, you might consider making an "Onboarding and Stabilization" epic in the project to capture any critical bugs documentation needs that surface during roll out and keeping the project open until those issues are addressed.
Often, there are still issues in the backlog that are not actually must-haves. Remove the project label, remove them from the epic, and review them the next time you meet with stakeholders so they can prioritize those against any of their other ongoing requests.
Retire the project label by adding "[Archive]" to the "Description" field and update the hex code to #B8B8B7.
Write a final update as a comment on the index issue and close the issue.
By default, completed projects show on of the website, but you can apply the Archived Project label to prevent that. We like to curate this page to showcase our most compelling, impactful, and well-documented work.
Release Process
This is the general process we use to release new code to one of our custom applications. The Apps team has defined a separate, specialized process for deploying custom code in Knack.
The Product Manager & Dev Lead collaboratively plan what issues will be included in the release
The Dev Lead ensures that all issues are assigned, completed, and tested before the release
After a pull request is reviewed by several devs, the PM reviews and adds any new functionality to the QA test script
The Dev Lead creates a single pull request that includes the scope of the release
Example:
The Dev Lead cleans up release notes
Example:
The release branch is deployed to Staging and the PM performs QA testing
The PM notifies users of scheduled downtime
Release party 🎉
PM merges pull request
Dev Lead notifies #atd-dev that the pull request has been tested, approved, and merged
Application-specific versions of this process are written as issues so they can be tracked collaboratively for each release.
Example:
Dockless-Mobility
This page contains technical details related to our management of dockless mobility data (e-scooters, bicycles, etc).
Mobility Data Specification (MDS)
We require dockless mobility operators to provide us with real-time trip reporting feeds in compliance with the .
Offboarding Checklist
IT Permissions and Access
DTS Website Management
We use the Data & Technology Services website, Austinmobility.io, to showcase our work and communicate with stakeholders. The content is driven by Github, Zenhub, and the DTS Portal.
Basics
An issue will appear on the or pages if it:
Docker
We use to manage runtime environments. Our Docker Hub is .
Useful Commands
Start docker engine
View all images
Show running containers
Copy ☝️ and use Text Cleaner to replace bullet points with task lists. Find "- "and replace with "- [ ] "
Add them to all relevant Slack channels and introduce the new team member to everyone in the main DTS channel.
If necessary, update issue description to ensure it clearly summarizes request.
Create a Project: label in Github. Fill out the "Description" field and use the hex code #3D3D3D for "Color." Use this label for all issues moving forward so that they render on the projects' website page and are easy to surface on Zenhub/Github.
Fill out the rest of the project index including background, outcomes, timeline, etc. Add these headings to the issue:
If practical, release versions of an application on a regular basis.
Perform usability testing to surface improvements to the user experience. Since we don't have dedicated user researchers at DTS, we love think-aloud usability testing for its simplicity and depth of insight. Here are some think-aloud test plans we've done. It's handy to record sessions on Teams so that you can expand on your notes, embed screenshots/clips in issues, etc.
## Scope & Deliverables
What are we delivering? What’s in scope, and what isn’t? Describe constraints you’re working with, e.g. “Can’t impact **\_**‘s workflow,” known roadblocks.
## Desired Outcomes
Impact this project can have, success metrics
## Timebox
How long should this take to build; optional section w/ caveats for more complex projects.
## References
- Google Drive link
We believe strongly that we do our best work when we work openly. It’s why we’ve built all of our reporting infrastructure on top of open data, and we’re continuing that practice with dockless mobility data.
We publish anonymized dockless trip records to our open data portal on an hourly basis. The dataset is here.
We have been very thoughtful about how we are approaching the release of this data. We are following the recommendations outlined in the Civic Analytics Network’s recent open letter, which was signed by Chief Data Officers and industry experts across the country.
Specifically, our trip records:
Do not include any vendor-provided identifiers. The trip IDs and device IDs in our dataset are completely arbitrary and cannot be traced to a specific operator.
Have start and end times rounded to the nearest 15 minutes.
Use latitude and longitude values rounded to three decimal degrees (roughly the area of a city block).
This is a public website that pulls directly from our public datasets. Here's the source code.
Trip Explorer
We have built an interactive web map which visualizes where dockless trips are starting and ending. We’re calling it the Dockless Data Explorer, available at dockless.austintexas.io.
Open Source
The source code for our dockless mobility tools is freely available in five repositories (and counting):
Here are some handy queries for fetching dockless data summaries from the Open Data Portal
Scooter and Bike trips by Month/Year*
Dockless Trips by vehicle type and month/year*
*Denotes that the query includes a filter for min/max distance (.1 miles / 500 miles) and max time (24 hours)
Dockless Trips by Day
The where clause can be modified to specify year and month. This selects february and march 2019 date_extract_m(start_time) in (2, 3) and date_extract_y(start_time) = 2019
Each project or product is rendered as a tile using content from the index issue:
Various Github content is used for the project/product "tiles"
Issues and activity
All issues with the Product: label for a given product will be rendered on the Issues tab (example) and all comments on the project/product Index issue itself will show on the Activity tab (example).
Evaluation
In order for the Evaluation tab (example) to render correctly, the project must have an evaluation completed in the DTS Portal.
Once an issue is labeled Project Index, it will automatically be added as a project in the DTS Portal.
If your project is not listed in Knack, the ETL may not yet have run. You can manually create a new entry in Knack, just make sure you provide the correct github issue # when creating the entry. The ETL will overwrite any project name you supply manually.
You can manually create a project if your project is not listed
Evaluating effort
Product Managers work with builders—the Apps, Dev, Data Science, or Geo teams—to assess the level of effort for a project.
Evaluating value
A project's predicted value is added to the Product Sync agenda so that the Product team can review it as a group and determine a score together.
Your python envrionment will require the following pacakges:
Update the number in the package's setup.py.
From the same directory as setup.py build the new version:
Product Manager Portfolios
Divisions
Products
https://data.austintexas.gov/resource/7d8e-dm7r.json?$query=select avg(trip_duration)/60 as avg_duration_minutes, sum(trip_distance) * 0.000621371 as total_miles, avg(trip_distance) * 0.000621371 as avg_miles, count(trip_id) as total_trips, date_extract_m(start_time) as month, date_extract_y(start_time) as year where trip_distance * 0.000621371 >= 0.1 and trip_distance * 0.000621371 < 500 and trip_duration < 86400 group by year, month
https://data.austintexas.gov/resource/7d8e-dm7r.json?$query=select vehicle_type, avg(trip_duration)/60 as avg_duration_minutes, sum(trip_distance) * 0.000621371 as total_miles, avg(trip_distance) * 0.000621371 as avg_miles, count(trip_id) as total_trips, date_extract_m(start_time) as month, date_extract_y(start_time) as year where trip_distance * 0.000621371 >= 0.1 and trip_distance * 0.000621371 < 500 and trip_duration < 86400 group by vehicle_type, year, month
https://data.austintexas.gov/resource/7d8e-dm7r.json?$query=select vehicle_type, avg(trip_duration)/60 as avg_duration_minutes, sum(trip_distance) * 0.000621371 as total_miles, avg(trip_distance) * 0.000621371 as avg_miles, count(trip_id) as total_trips, date_trunc_ymd(start_time) as date_ where trip_distance * 0.000621371 >= 0.1 and trip_distance * 0.000621371 < 500 and trip_duration < 86400 and date_extract_m(start_time) in (2, 3) and date_extract_y(start_time) = 2019 group by vehicle_type, date_trunc_ymd(start_time)